【发布时间】:2012-06-29 22:10:08
【问题描述】:
请指教。我有一个文档集合,它们都有一个共同的属性(例如出现了法语这个词),其中一些文档已被标记为与该集合无关(例如出现法语之吻),但并非所有文档都保证已被识别。找出哪些其他文档不属于的最佳方法是什么。
【问题讨论】:
标签: artificial-intelligence neural-network document-classification
请指教。我有一个文档集合,它们都有一个共同的属性(例如出现了法语这个词),其中一些文档已被标记为与该集合无关(例如出现法语之吻),但并非所有文档都保证已被识别。找出哪些其他文档不属于的最佳方法是什么。
【问题讨论】:
标签: artificial-intelligence neural-network document-classification
鉴于您的示例“法语”,我将假设该特征是出现在文档中的单词。另外,由于您提到“法式吻”不相关,我将进一步假设在您的情况下,特征是在特定意义上使用的词。例如,如果“台球”是一项功能,您可能会说提到游泳池的文档是相关的,但那些谈论台球(这项运动,如斯诺克或台球)的文档不相关。
这样想:您没有不完整的训练集,而是较小的训练集。这个想法是使用这个小的训练数据来构建更大的训练数据。这是引导。
对于训练数据中出现的每个特征,仅基于其周围的词构建语言模型。您不需要为整个文档构建模型。理想情况下,仅包含该特征的句子就足够了。这就是我所说的本地化语言模型 (LLM)。
从您的训练数据构建两个这样的 LLM(我们称之为 T_0):一个用于相关文档,例如 M1,另一个用于不相关文档,例如 M0。现在,为了构建更大的训练数据,基于 M1 和 M0 对文档进行分类。对于每个新文档 d,如果 d 不包含特征词,它将自动添加为“坏”文档。如果 d 包含特征词,则考虑在 d 中围绕该词的本地窗口(与您用于构建 LLM 的窗口大小相同),并计算困惑度用 M0 和 M1 的这个单词序列。将文档归类为具有较低困惑度的类别。
为了形式化,伪代码是:
T_0 := initial training set (consisting of relevant/irrelevant documents)
D0 := additional data to be bootstrapped
N := iterations for bootstrapping
for i = 0 to N-1
T_i+1 := empty training set
Build M0 and M1 as discussed above using a window-size w
for d in D0
if feature-word not in d
then add d to irrelevant documents of T_i+1
else
compute perplexity scores P0 and P1 corresponding to M0 and M1 using
window size w around the feature-word in d.
if P0 < P1 - delta
add d to irrelevant documents of T_i+1
else if P1 < P0 - delta
add d to relevant documents of T_i+1
else
do not use d in T_i+1
end
end
end
Select a small random sample from relevant and irrelevant documents in
T_i+1, and (re)classify them manually if required.
end
【讨论】:
首先,您应该注意如何提取示例文档的特征。数每个字不是一个好方法。您可能需要一些像 TFIDF 这样的技术来教分类器哪些词对分类很重要,哪些词不重要。
建立正确的字典。在您的情况下,单词 French Kiss 应该是一个独特的单词,而不是 French + Kiss 的序列。使用正确的技术来构建正确的字典很重要。
样本中的剩余误差是正常的,我们称之为“非线性可分”。有大量关于如何解决这个问题的先进研究。例如,SVM(支持向量机)将是您喜欢使用的。请注意,单层 Rosenblatt 感知器通常对非线性可分的数据集表现出非常差的性能。
【讨论】:
【讨论】: