量化文本关键词用于神经网络分析

我正在进行一个小型研究项目。我希望编写一个程序,该程序可以a) 处理大量短文本(每篇约100词,共几千篇)b) 识别文本中的关键词c) 将所有关键词呈现给一组用户,让他们指出是否觉得这些关键词有趣d) 让软件学习哪些关键词或组合可能更受欢迎。假设在这个例子中,目标群体是统一的。

现在,有两个主要挑战。第一个我已经有了答案,第二个我正在寻求帮助。

1) 关键词识别。逆频分析似乎是这里的解决方法。识别那些在给定文本中相对于其他文本出现比例较高的词。不过,这也有一些缺点,例如非常常见的关键词可能会被忽略。

2) 如何将数据集准备成数值形式。我可以将关键词映射到输入神经元,然后根据它们的相对频率调整值,但这限制了模型的灵活性,并且难以添加新的关键词。如果我们想扩展到几十个关键词之外,这也会很快变得竞争性地昂贵。

这个问题通常是如何解决的?


回答:

这是一个开始的方法:

  • 清理你的输入文本(移除特殊标记等)
  • 使用n-gram作为特征(可以从1-gram开始)。
  • 将用户的反馈“是否喜欢”视为二元标签。
  • 学习一个二元分类器(任何模型都可以,朴素贝叶斯、逻辑回归)。

1) 关键词识别。逆频分析似乎是这里的解决方法。识别那些在给定文本中相对于其他文本出现比例较高的词。不过,这也有一些缺点,例如非常常见的关键词可能会被忽略。

在你构建的第一个模型中,你可以跳过这一部分。将句子视为词袋(n-gram)以简化第一个工作模型。如果你愿意,你可以稍后将其作为特征权重添加。

2) 如何将数据集准备成数值形式。我可以将关键词映射到输入神经元,然后根据它们的相对频率调整值,但这限制了模型的灵活性,并且难以添加新的关键词。如果我们想扩展到几十个关键词之外,这也会很快变得竞争性地昂贵。

你可以使用一个字典将n-gram映射到整数ID。对于每个训练示例,特征将是稀疏的,因此你的训练示例可能如下所示:

34, 68, 79293, 23232   -> 0   (负标签)340, 608, 3, 232       -> 1   (正标签)假设你有一个字典(或词汇表)映射:3: foo34: movie68: in-stock232: bar340: barz...

要使用神经网络,你需要有一个嵌入层,通过聚合(例如,平均)所有特征的嵌入向量,将稀疏特征转换为密集特征。使用上面的相同示例,假设我们只使用4维嵌入:

34 ->    [0.1, 0.2, -0.3, 0]68 ->    [0,   0.1, -0.1, 0.2]79293 -> [0.3, 0.0, 0.12, 0]23232 -> [0.4, 0.0, 0.0,  0]------------------------------- sumsum   -> [0.8, 0.3, -0.28, 0.2]------------------------------- L1-normalizel1    -> [0.8, 0.3, -0.28, 0.2] ./ (0.8 + 0.3 + 0.28 + 0.2)      -> [0.51,0.19,-0.18,0.13]

在预测时,你需要使用字典和相同的方式进行特征提取(清理/n-gram生成/将n-gram映射到ID),这样你的模型才能理解输入。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注