【问题标题】:Word2Vec is it for word only in a sentence or for features as well?Word2Vec 是仅用于句子中的单词还是用于特征?
【发布时间】:2019-02-22 01:28:45
【问题描述】:

我想了解更多关于 Word2Vec 的信息:

我目前正在尝试构建一个程序来检查句子的嵌入向量。同时,我还构建了一个特征提取,使用 sci-kit learn 从句子中提取引理 0、引理 1、引理 2。

据我了解;

1) 特征提取:引理 0、引理 1、引理 2 2)词嵌入:将向量嵌入到每个字符中(这可以通过使用gensim word2vec来实现(我试过了))

更多解释:

句子 = “我有一支笔”。 Word = 句子的记号,例如“有”

1) 特征提取

"I have a pen" --> lemma 0:I, lemma_1: have, lemma_2:a....... lemma 0:have, lemma_1: a, lemma_2:pen 等等.. 然后当尝试使用 one_hot 提取特征然后将产生:

[[0,0,1],
[1,0,0],
[0,1,0]]

2) 词嵌入(Word2vec)

"I have a pen" ---> "I", "have", "a", "pen"(tokenized) 然后来自 gensim 的 word2vec 将产生矩阵,例如如果使用 window_size = 2 产生:

[[0.31235,0.31345],
[0.31235,0.31345],
[0.31235,0.31345],
[0.31235,0.31345],
[0.31235,0.31345]
]

浮点数和整数用于解释目的,原始数据应根据句子而有所不同。这些只是用来解释的虚拟数据。*

问题:

1) 我对 Word2Vec 的理解正确吗?如果是,特征提取和word2vec有什么区别? 2)我很好奇是否可以使用 word2vec 来获取特征提取嵌入,因为据我了解,word2vec 只是为每个单词而不是特征找到嵌入。

希望有人可以帮助我。

【问题讨论】:

    标签: word2vec


    【解决方案1】:

    您的要求并不完全清楚,因为您似乎将许多概念混在一起。 (Word2Vec 给出每个词的向量,而不是字符;词嵌入是对词的一种特征提取,而不是“特征提取”的替代方法;等等。所以:我怀疑你的理解是否正确。)

    “特征提取”是一个非常笼统的术语,意思是获取原始数据(例如句子)并创建有利于其他类型计算或下游机器学习的数字表示的任何和所有方式。

    将句子语料库转换为数字数据的一种简单方法是对每个句子中出现的单词使用“单热”编码。例如,如果你有这两个句子...

    ['A', 'pen', 'will', 'need', 'ink']
    ['I', 'have', 'a', 'pen']
    

    ...那么您有 7 个独特的大小写扁平词...

    ['a', 'pen', 'will', 'need', 'ink', 'i', 'have']
    

    ...您可以将两个句子“单热”为它们包含的每个单词的 1 或 0,从而获得 7 维向量:

     [1, 1, 1, 1, 1, 0, 0]  # A pen will need ink
     [1, 1, 0, 0, 0, 1, 1]  # I have a pen
    

    即使使用这种简单的编码,您现在也可以在数学上比较句子:这两个向量之间的欧几里德距离或余弦距离计算将为您提供一个汇总距离数,而没有共享单词的句子将具有较高的“距离” ,而共享词多的人会有一个小的“距离”。

    这些句子的其他非常相似的可能替代特征编码可能涉及每个单词的计数(如果一个单词出现不止一次,则可能出现高于 1 的数字)或加权计数(其中单词得到一个通过某种度量(例如常见的“TF/IDF”计算)获得额外的显着性因子,因此值缩放为从 0.0 到高于 1.0 的值)。

    请注意,您不能将单个句子编码为与其自己的单词一样宽的向量,例如“我有一支笔”为 4 维 [1, 1, 1, 1] 向量。那是任何其他句子都无法比拟的。它们都需要转换为相同维度大小的向量,并且在“一个热门”(或其他简单的“词袋”)编码中,该向量的维度等于总词汇量在所有句子中都知道。

    Word2Vec 是一种将单个单词转换为“密集”嵌入的方法,其维度较少,但在这些维度中有许多非零浮点值。这不是稀疏嵌入,它有许多维度,大多为零。单独从上面看 'pen' 的 7 维稀疏嵌入将是:

    [0, 1, 0, 0, 0, 0, 0]  # 'pen'
    

    如果您训练了一个二维 Word2Vec 模型,它可能有如下密集嵌入:

    [0.236, -0.711]  # 'pen'
    

    所有 7 个单词都有自己的二维密集嵌入。例如(所有值组成):

    [-0.101, 0.271]   # 'a'
    [0.236, -0.711]   # 'pen'
    [0.302, 0.293]    # 'will'
    [0.672, -0.026]   # 'need'
    [-0.198, -0.203]  # 'ink'
    [0.734, -0.345]   # 'i'
    [0.288, -0.549]   # 'have'
    

    如果您有Word2Vec 向量,那么为更长的文本(如句子)制作向量的另一种简单方法是将句子中单词的所有词向量平均在一起。所以,代替句子的 7 维稀疏向量,例如:

    [1, 1, 0, 0, 0, 1, 1]  # I have a pen
    

    ...你会得到一个像这样的二维密集向量:

    [ 0.28925, -0.3335 ]  # I have a pen
    

    基于这些密集嵌入特征,不同的句子可以通过距离相互比较。或者这些可能很好地用作下游机器学习过程的训练数据。

    所以,这是一种“特征提取”形式,它使用Word2Vec 而不是简单的字数统计。还有许多其他更复杂的方法可以将文本转换为向量。它们都可以算作“特征提取”的一种。

    哪种方法最适合您的需求取决于您的数据和最终目标。通常最简单的技术效果最好,尤其是当您拥有大量数据时。但几乎没有绝对的确定性,您通常只需要尝试多种替代方案,并在一些可重复的定量评分评估中测试它们的表现如何,从而找到最适合您的项目的方案。

    【讨论】:

    • 平均词向量是为文本制作向量的一种可能方法。还有很多其他方法。
    • 它们不是“2 维”或“3 维”向量,而是您指定的任何 size ——对于真实数据集,通常为 100 维或更多。向量维度与window 大小无关。 (而且我不建议对只有几或几十句话的小型玩具大小的数据集进行太多实验——这与真实数据发生的情况非常不同,它可能会引入自己的问题。
    • 不,我的[-0.101, 0.271] 向量中的示例坐标都不代表“稀疏空间”。这些是密​​集嵌入中的坐标,维度更少,并且很少(基本上没有)为 0.0。你是对的,在如此密集的嵌入中,像-0.101 这样的单个坐标没有任何完全可解释的含义。它们仅在与所有其他坐标结合时才​​有意义,作为 N 维空间中的粗略方向,并且与其他向量相比。
    • 您不能要求Word2Vec mdoel 报告“单热”向量,无论是单词还是文本,因为这不是它的目的,如上所述,它没有t 在训练的任何时候都创建一个单热向量。 (有一个阶段有点类似于单词的单热编码,但它实际上只是在词汇表大小的数组中的某个位置查找单词的密集向量。它没有'甚至不实例化 one-hot 向量。)
    • 非常感谢您向我澄清和解释一切。我现在了解 Word2vec 的基础知识。我将继续尝试大数据集以了解有关 Word2vec 的更多信息。我很高兴你愿意花时间向我解释。这确实节省了我大量搜索和阅读论文的时间,也节省了我的实现来理解它。再次感谢您。
    猜你喜欢
    • 2018-09-23
    • 2019-01-02
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 2019-02-23
    • 2014-12-30
    • 2023-03-26
    相关资源
    最近更新 更多