有没有一种方法可以仅对单词进行矢量化处理,即不是从python的语料库或单词包中提取矢量?

时间:2018-10-29 15:05:21

标签: python nlp cosine-similarity

我的用例是将两个列表中的单词矢量化,如下所示。

ListA = [Japan, Electronics, Manufacturing, Science]

ListB = [China, Electronics, AI, Software, Science]

我知道word2vecGlove可以对单词进行矢量化处理,但是它们可以通过语料库或单词袋来实现,即我们必须传递被分解为标记的句子,然后对其进行矢量化处理。

有没有一种方法可以将列表中的单词向量化?

PS。我是NLP方面的新手,因此请原谅任何明显的观点。

3 个答案:

答案 0 :(得分:0)

您可能正在寻找的仅仅是经过预训练的嵌入。是这样吗如果是这样,您可以使用以下方法:

import spacy

nlp = spacy.load('en_core_web_md')
tokens = nlp(' '.join(ListA+ListB))

for token1 in tokens:
    for token2 in tokens:
        print(token1.text, token2.text, token1.similarity(token2))

答案 1 :(得分:0)

这是您sort it in descending order of cosine values在我的其他评论中回答您的问题的方式:

import spacy

nlp = spacy.load('en_core_web_md')
tokens = nlp(' '.join(ListA+ListB))
list_to_sort = []

for token1 in tokens:
    for token2 in tokens:
        list_to_sort.append((token1.text, token2.text, token1.similarity(token2))

sorted_list = sorted(list_to_sort, key=lambda x: x[2], reverse=True)
print(sorted_list)

答案 2 :(得分:0)

我假设您希望看到ListA中与ListB中的每个单词最相似的前3个单词。如果是这样,这是您的解决方案(并且如果您想让ListB中的所有最相似的单词排在前面,我也为此添加了一个可选行):

import spacy

nlp = spacy.load('en_core_web_md')
tokensA = nlp(' '.join(ListA))
# use if wanting tokens in ListB compared to all tokens present: tokensA = nlp(' '.join(ListA+ListB))
tokensB = nlp(' '.join(ListB))

output_mapping = {tokenB.text: [] for tokenB in tokensB}
for tokenB in tokensB:
    for tokenA in tokensA:
        # add the tuple to the current list & sort by similarity
        output_mapping[tokenB.text].append((tokenA.text, tokenB.similarity(tokenA)))
        output_mapping[tokenB.text] = list(sorted(output_mapping[tokenB.text], key=lambda x: x[1], reverse=True))

for tokenB in sorted(output_mapping.keys()):
    # print token from listB and the top 3 similarities to list A, sorted
    print(tokenB, output_mapping[key][:3])