/images/avatar.png

vllbc

Word Embedding

词嵌入

介绍

词嵌入自然语言处理(NLP)中语言模型表征学习技术的统称。概念上而言,它是指把一个维数为所有词的数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数上的向量。

词嵌入的方法包括人工神经网络、对词语同现矩阵降维概率模型以及单词所在上下文的显式表示等。

在底层输入中,使用词嵌入来表示词组的方法极大提升了NLP中语法分析器文本情感分析等的效果。

以上是百度百科中对词嵌入的定义。本文只介绍传统的词向量,也就是固定的词向量。deep contextualized词向量模型在本博客预训练模型内容里面。词嵌入也可以称为词表征(word representation),可以粗略得把它分为三个阶段:

三数之和

三数之和

题目:

https://leetcode-cn.com/problems/3sum/solution/

思路:

​ 第一眼看就想到了用双指针,注意重复数值的处理问题,算是一个滑动窗口问题

代码:

class Solution:

    def threeSum(self, nums: List[int]) -> List[List[int]]:

        res = []

        if len(nums) < 3:

            return []

        nums.sort()

        for i, num in enumerate(nums):

            if num > 0:

                return res

            if i > 0 and nums[i] == nums[i-1]:

                continue

            left, right = i+1, len(nums) - 1

            while left < right:

                temp = nums[i] + nums[left] + nums[right]

                if temp == 0:

                    res.append([nums[i], nums[left], nums[right]])

                    while left < right and nums[right-1] == nums[right]:

                        right -= 1

                    while left < right and nums[left+1] == nums[left]:

                        left += 1

                    left += 1

                    right -= 1

                if temp > 0:

                    right -=1

                if temp < 0:

                    left += 1

        return res

删除排序数组中的重复项

删除排序数组中的重复项

删除排序数组中的重复项1

题目:

https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/

思路:

双指针,定义 nums[0...i] 为为非重复数列,遍历整个数列不断的维护这个定义

代码:

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        start = 0
        for i in range(len(nums)):
            if nums[i] != nums[start]:
                start += 1
                nums[i],nums[start] = nums[start],nums[i]
        return start + 1

删除排序数组中的重复项2

题目:

https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array-ii/

思路:

​ 也是利用双指针,一个指针用于遍历数组元素,一个指针指向要拷贝赋值的索引位置

asyncio

import threading
import time

多线程例子

def spider():
    #.....
    time.sleep(0.02)
def main1():
    for i in range(100):
        spider()
def main2():
    thread_list = []
    for i in range(100):
        thread = threading.Thread(target = spider)
        thread.start()
        thread_list.append(thread)
    for t in thread_list:
        t.join()
if __name__ == "__main__":
    start = time.time()
    main1()
    end = time.time()
    print("time1 :{:.4f}".format(end-start))
    
    start = time.time()
    main2()
    end = time.time()
    print("time2 :{:4f}".format(end-start))
time1 :2.0523
time2 :0.037929

yield

def fib(n):
    a,b = 0,1
    while b<n: 
        a,b = b,a+b
        yield a
print(fib(100))
for i in fib(100):
    print(i)
<generator object fib at 0x000002B1A7AA1E60>
1
1
2
3
5
8
13
21
34
55
89

协程

GEN_CREATED 创建完成,等待执行 GEN_RUNNING 解释器正在执行 GEN_SUSPENDED 在 yield 表达式处暂停 GEN_CLOSE 执行结束,生成器停止

TextRank

参考:https://blog.csdn.net/asialee_bird/article/details/96894533

TextRank算法是一种基于图的用于关键词抽取和文档摘要的排序算法,由谷歌的网页重要性排序算法PageRank算法改进而来,它利用一篇文档内部的词语间的共现信息(语义)便可以抽取关键词,它能够从一个给定的文本中抽取出该文本的关键词、关键词组,并使用抽取式的自动文摘方法抽取出该文本的关键句。