从词汇中的所需单词创建新的词嵌入
Posted
技术标签:
【中文标题】从词汇中的所需单词创建新的词嵌入【英文标题】:Creating new word-embeddings out of desired words from the vocab 【发布时间】:2021-11-30 23:16:00 【问题描述】:我已经使用计数矢量化器为一些文本数据创建了 word2vec。现在我想将生成的词汇(表示共同含义/方面)中的某些单词分组为新的单个单词,从而找到新的 word2vec 表示。 我该如何解决这个问题?
from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd
import numpy as np
A = 'some_text': ('cat is red and fat', 'dog is blue hairy thin','horse is brown and tall')
data = pd.DataFrame(A)
# some_text
# 0 cat is red and fat
# 1 dog is blue hairy thin
# 2 horse is brown and tall
cv = CountVectorizer()
vec = cv.fit_transform(data.some_text)
df = pd.DataFrame(vec.toarray(), columns=cv.get_feature_names())
# and blue brown cat dog fat hairy horse is red tall thin
# 0 1 0 0 1 0 1 0 0 1 1 0 0
# 1 0 1 0 0 1 0 1 0 1 0 0 1
# 2 1 0 1 0 0 0 0 1 1 0 1 0
我想将词袋中的某些词组合成另一个词,如下所示:
color = 'blue',' brown', 'red'
body = 'fat', 'thin', 'tall'
animal = 'cat',' dog', 'horse'
我希望词汇具有上述单词(例如,单词 'animal' 而不是 'cat' 、 'dog' 或 ' horse'),然后获取字数。我应该如何着手获得新的所需词嵌入?
【问题讨论】:
我投票结束这个问题,因为它与 help center 中定义的编程无关,而是关于 ML 理论和/或方法 - 请参阅machine-learning
@ 中的介绍和注意事项987654322@.
【参考方案1】:
您的代码显示您使用 CountVectorizer
创建 3 个文本的矢量表示。它还没有显示 word2vec 算法的任何用途。所以你还没有任何每个单词的词向量。
对于您真正提出的要求 - 能够用标记 animal
替换动物,或者用标记 color
替换颜色,使用预先计算的参考词汇数据库可能会更好,比如流行的“WordNet”,它实际上描述了这种关系。 (具体来说,那些包含多个变体更具体的词的更一般的词称为“上位词”,在 WordNet 中,您可以查找其他词的上位词。)
如果您确实需要词向量,则可以尝试重用其他人的训练过的词向量,前提是您认为他们的训练数据与您的训练数据足够相似以至于词向量合适。
或者,您可以根据自己的训练文本训练自己的词向量。但是,与这 3 个短句相比,您需要的文本要多得多:好的词向量集需要数百万词的实际用法和不同的训练数据。
但是,对于您提出的特定 'replace-a-word-with-its-hypernym' 请求,词向量并不容易工作 - 因为词向量之间的相对相似性不能清楚地编码 '更一般的”(上位词)或“更具体的”(下位词)类型的关系。 (例如,“动物”、“猫”、“狗”和“马”可能都彼此接近,但很难确定“动物”是最笼统的术语,不使用其他外部知识。)
【讨论】:
以上是关于从词汇中的所需单词创建新的词嵌入的主要内容,如果未能解决你的问题,请参考以下文章