使用 NLP 标记 Unix/非 Unix 日志

数据挖掘 机器学习 深度学习 nlp 正则表达式
2022-02-20 01:54:30

我有一组非结构化数据,包括 Unix、Windows 等不同操作系统的命令输出日志。

例如:

于 2019 年 1 月 1 日发布 Stackoverflow 0.0.1 版。覆盖率为 99%,构建通过。

(这只是一个例子,与实际用例无关)。对于不同的操作系统,此输出是不同的。我想对这些数据进行标记

对于上述情况,输出应为:

PRODUCT_NAME 的版本 VERSION_NUMBER 于发布日期发布。TEST_TYPE 是 TEST_VALUE,TEST_TYPE 是 TEST_VALUE

在这里,一些单词被替换为它们对应的示例标签。

我研究过 POS 标记、NER、LSTM 等技术,但我不知道哪种技术适合这个特定问题。我如何从原始输出中收集数据以及如何在此处应用这些技术。

感谢所有愿意帮助我的人。

1个回答

PoS 标记仅适用于自然语言并识别句子的语法部分,仅此而已。LSTM 是一种可用于预测序列的算法。如果您已经有数据可以进行信息提取 (IE) ,命名实体识别 (NER)术语提取可能会起作用。但是,为了使用这些技术,您需要有一个经过训练的模型,并且为了训练一个您需要数据。在您的情况下,这将涉及手动识别和标记句子的各个部分,然后使用该数据训练模型。

在我看来,最好的方法是使用正则表达式来识别句子的一部分作为信息提取的方法之一,并使用硬编码规则来最好地识别你以后要替换的内容。

例如,如果要搜索示例中的版本:

重新进口

s = '发布版本。Stackoverflow 的 0.0.1,于 2019 年 1 月 1 日。覆盖率为 99%,构建通过。

re.search(r'发布版本(.*?)for', s).group(1)

'0.0.1'

查看这些资源,这些资源将帮助您使用 Regex 在 Python 中解析日志。

https://pythonicways.wordpress.com/2016/12/20/log-file-parsing-in-python/

https://medium.com/devops-challenge/apache-log-parser-using-python-8080fbc41dda

但是,如果您更喜欢使用命名实体识别或术语提取技术,您可以破解 NER 模型并使用您的数据自己训练它。但请记住,根据Poibeau,Thierry 的说法;Kosseim,莱拉(2001 年)。“从非新闻文本中提取专有名称”。语言和计算机。37(1):144-157。

研究表明,即使是最先进的 NER 系统也很脆弱,这意味着为一个领域开发的 NER 系统通常在其他领域表现不佳。

根据维基百科:调整 NER 系统以在新领域中表现良好需要付出相当大的努力;这对于基于规则和可训练的统计系统都是如此。

因此,即使您成功了,准确性也会低于您仅使用正则表达式提取数据的情况。仅对于命名实体(公司、名称等),大约减少 97% 到 93%。在您的情况下,准确度降低会少得多。

查看此链接以获取有关信息提取的更多信息:https ://web.stanford.edu/~jurafsky/slp3/17.pdf