网站兼职做计划赚小钱域名网站建设方案书
news/
2025/9/24 2:36:00/
文章来源:
网站兼职做计划赚小钱,域名网站建设方案书,程序员怎么用wordpress,国内永久免费云服务器推荐通过共现矩阵和余弦相似度实现机器对单词的认知、python实现本文介绍的定义#xff1a;一、语料库预处理二、单词的分布式表示三、单词的相似度四、相似单词排序本文介绍的定义#xff1a;
语料库、计数方法的目的、语料库预处理、单词的分布式表示、分布式假设、上下文、窗…
通过共现矩阵和余弦相似度实现机器对单词的认知、python实现本文介绍的定义一、语料库预处理二、单词的分布式表示三、单词的相似度四、相似单词排序本文介绍的定义
语料库、计数方法的目的、语料库预处理、单词的分布式表示、分布式假设、上下文、窗口大小、基于计数的方法表示单词、用向量表示单词、共现矩阵、单词的相似度、余弦相似度、相似单词排序。
一、语料库预处理
语料库大量的文本数据。
计数方法的目的从语料库中提取语言的本质。
语料库预处理将文本分割为单词并将分割后的单词列表转化为单词ID列表。实现代码如下其中corpus 是单词ID列表word_to_id 是单词到单词ID的字典id_to_word是单词ID到单词的字典。
def preprocess(text):text text.lower()text text.replace(., .)words text.split( )word_to_id {}id_to_word {}for word in words:if word not in word_to_id:new_id len(word_to_id)word_to_id[word] new_idid_to_word[new_id] wordcorpus np.array([word_to_id[w] for w in words])return corpus, word_to_id, id_to_word举个例子
text You say goodbye and I say hello.
corpus, word_to_id, id_to_word preprocess(text)
print(corpus)
print(word_to_id)
print(id_to_word)输出
[0 1 2 3 4 1 5 6]
{you: 0, say: 1, goodbye: 2, and: 3, i: 4, hello: 5, .: 6}
{0: you, 1: say, 2: goodbye, 3: and, 4: i, 5: hello, 6: .}二、单词的分布式表示
单词的分布式表示颜色通过RGB三原色分别存在多少来表示RGB这样的向量表示可以更准确地指定颜色颜色之间的关联性是否是相似的颜色也更容易通过向量表示来判断和量化。类似于颜色的向量表示方法运用到单词上形成单词含义的向量表示在自然语言处理领域这称为分布式表示。
分布式假设某个单词的含义由它周围的单词形成。单词本身没有含义单词含义由它所在的上下文语境形成。
上下文上下文是指某个单词的周围词汇。
窗口大小将上下文的大小即周围的单词有多少个称为窗口大小。
基于计数的方法表示单词如何基于分布式假设使用向量表示单词可以在关注某个单词的情况下对它的周围出现了多少次什么单词进行计数然后再汇总称为“基于计数的方法”。
用向量表示单词向量表示的是每个单词的上下文(与窗口大小有关)所包含的单词的频数(出现次数)。 共现矩阵如下图所示汇总所有单词的向量表示的表格。 代码
def create_co_matrix(corpus, vocab_size, window_size1):生成共现矩阵:param corpus: 语料库单词ID列表:param vocab_size:词汇个数:param window_size:窗口大小当窗口大小为1时左右各1个单词为上下文:return: 共现矩阵corpus_size len(corpus)co_matrix np.zeros((vocab_size, vocab_size), dtypenp.int32)for idx, word_id in enumerate(corpus):for i in range(1, window_size 1):left_idx idx - iright_idx idx iif left_idx 0:left_word_id corpus[left_idx]co_matrix[word_id, left_word_id] 1if right_idx corpus_size:right_word_id corpus[right_idx]co_matrix[word_id, right_word_id] 1return co_matrixC create_co_matrix(corpus, vocab_size, window_size1)
for i in range(7):print(C[i])输出
[0 1 0 0 0 0 0]
[1 0 1 0 1 1 0]
[0 1 0 1 0 0 0]
[0 0 1 0 1 0 0]
[0 1 0 1 0 0 0]
[0 1 0 0 0 0 1]
[0 0 0 0 0 1 0]三、单词的相似度
单词的相似度两个单词含义相近的程度。
前面通过共现矩阵将单词表示为了向量如何测量向量间的相似度有代表性的方法有向量内积、欧式距离、余弦相似度等。
余弦相似度设有x、y两个向量他们的余弦相似度公式如下。余弦相似度直观表示了两个向量在多大程度上指向同一方向两个向量完全指向相同的方向时余弦相似度为 1完全指向相反的方向时余弦相似度为 -1。 实现余弦相似度需要解决除数为0问题可以在执行除法时加上一个微小值。
实现代码
def cos_similarity(x, y, eps1e-8):计算余弦相似度:param x: 向量:param y: 向量:param eps: 用于防止“除数为0”的微小值:return:nx x / (np.sqrt(np.sum(x ** 2)) eps)ny y / (np.sqrt(np.sum(y ** 2)) eps)return np.dot(nx, ny)例子求you和i的相似度 。
text You say goodbye and I say hello.
corpus, word_to_id, id_to_word preprocess(text)
vocab_size len(word_to_id)
C create_co_matrix(corpus, vocab_size)c0 C[word_to_id[you]] #you的单词向量
c1 C[word_to_id[i]] #i的单词向量
print(cos_similarity(c0, c1))输出
0.7071067691154799四、相似单词排序
相似单词排序当某个单词被作为查询词时将与这个查询词相似的单词按降序显示出来。
实现步骤
1.取出查询词的单词向量
query_id word_to_id[query]
query_vec word_matrix[query_id]2.求查询词的单词向量和其他所有单词向量的余弦相似度。
vocab_size len(id_to_word)
similarity np.zeros(vocab_size)
for i in range(vocab_size):similarity[i] cos_similarity(word_matrix[i], query_vec)3.基于余弦相似度的结果按降序显示它们的值。argsort()方法可以按升序对 NumPy 数组的元素进行排序返回值是数组的索引。将 NumPy 数组的各个元素乘以 -1 后再使用 argsort() 方法可以按降序输出单词相似度。 count 0for i in (-1 * similarity).argsort():if id_to_word[i] query:continueprint( %s: %s % (id_to_word[i], similarity[i]))count 1if count top:return
完整代码
def most_similar(query, word_to_id, id_to_word, word_matrix, top5):相似单词的查找:param query: 查询词:param word_to_id: 从单词到单词ID的字典:param id_to_word: 从单词ID到单词的字典:param word_matrix: 汇总了单词向量的矩阵假定保存了与各行对应的单词向量:param top: 显示到前几位if query not in word_to_id:print(%s is not found % query)returnprint(\n[query] query)query_id word_to_id[query]query_vec word_matrix[query_id]vocab_size len(id_to_word)similarity np.zeros(vocab_size)for i in range(vocab_size):similarity[i] cos_similarity(word_matrix[i], query_vec)count 0for i in (-1 * similarity).argsort():if id_to_word[i] query:continueprint( %s: %s % (id_to_word[i], similarity[i]))count 1if count top:return
例子按降序显示与you最相似的前五个单词。
text You say goodbye and I say hello.
corpus, word_to_id, id_to_word preprocess(text)
vocab_size len(word_to_id)
C create_co_matrix(corpus, vocab_size)most_similar(you, word_to_id, id_to_word, C, top5)输出结果和我们的感觉存在很大的差异。一个可能的原因是这里的语料库太小了。
[query] yougoodbye: 0.7071067691154799i: 0.7071067691154799hello: 0.7071067691154799say: 0.0and: 0.0
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/914615.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!