我的用例是将两个列表中的单词矢量化,如下所示。
ListA = [Japan, Electronics, Manufacturing, Science]
ListB = [China, Electronics, AI, Software, Science]
我知道word2vec
和Glove
可以对单词进行矢量化处理,但是它们可以通过语料库或单词袋来实现,即我们必须传递被分解为标记的句子,然后对其进行矢量化处理。
有没有一种方法可以将列表中的单词向量化?
PS。我是NLP方面的新手,因此请原谅任何明显的观点。
答案 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])