我想探索和试验使用神经网络识别文本模式的方法。
例子:
- 今天上午11:00 XYZ 股票价格下跌
- 检索 2018 年 3 月4 日交换的项目列表
- 在昨天凌晨 3 点到 5 点 之间显示错误日志。
- 预订10 月 3 日的航班。
- 这个星期五我有什么会议吗?
- 提醒我 9月4 日星期二早起
这是一个项目,所以我不使用正则表达式。论文、项目、想法都受到欢迎,但我想通过特征提取/模式检测来训练一个模型,该模型可以识别它已经看到的模式。
我想探索和试验使用神经网络识别文本模式的方法。
例子:
这是一个项目,所以我不使用正则表达式。论文、项目、想法都受到欢迎,但我想通过特征提取/模式检测来训练一个模型,该模型可以识别它已经看到的模式。
方法
有两种主要方法可以检测文本中离散量的任何人类可读表示。
还有其他方法,并且有这两种方法或其中一种方法与其他方法的混合体,但这两种方法在理论上是最直接的,并且可能同时产生可靠性和准确性。
重入学习
培训是否涉及重入学习技术(例如强化)是一个切线问题,此答案不会解决,但要知道所有培训是否仅仅是部署组件,或者是否实时发生适应和/或收敛是一种架构作出的决定。
实际问题
实际上,每个识别的输出如下。
同样实际上,输入必须来自一个特定语言环境的规范,即
... 或者 ...
... 或者 ...
许多特定于语言环境的语法必须规范化为通用日期和时间语言,例如:
जनवरी --> D_01
Enero --> D_01
一月 --> D_01
这样一年中第一个月的菲律宾语和冰岛语名称以相同的二进制模式进入人工网络。
**具体日期和时间*
在上述 1. 的情况下,它本质上是半启发式的,并且假设语言环境完全是 en-US.utf-8,PCRE 库或等效于用作搜索方向启发式的 CASE INSENSITIVE 模式包括下列的。
(^|[^0-9a-z])(19|20|21)[0-9][0-9])([^0-9a-z]|$)
(^|[^0-9a-z])(Mon|Monday|Tue|Tues|Tuesday|Wed|Wednesday|Thu|Thur|Thurs|Thursday|Fri|Friday|Sat|Saturday|Sun)([^0-9a-z]|$)
(^|[^0-9a-z])(Jan|January|Feb|February|Mar|March|Apr|April|May|Jun|June|Jul|July|Aug|August|Sep|Sept|September|Oct|October|Nov|November|Dec|December)([^0-9a-z]|$)
(^|[^0-9a-z])(Today|Yesterday|Tomorrow)([^0-9a-z]|$)
(^|[^0-9])[AP]M|[AP][.]M[.]|Noon|Midnight)([^0-9a-z]|$)
(^|[^a-z])(0?[1-9])(:[0-5][0-9]){1,2}([^a-z]|$)
应该有其他时间、连字符或斜线分隔的日期或时区。
然后将这些日期和时间伪影的位置和归一化编码代入人工网络输入,而不是流中的原始文本,从而减少冗余并提高训练速度以及由此产生的识别准确性和可靠性。
在上述 2. 的情况下,整个识别的负担都留给了人工网络。优点是对日期和时间约定的依赖较少。缺点是训练数据种类和训练时期的负担要大得多,这意味着计算资源的负担要大得多,项目利益相关者的耐心也大得多。
开窗
重叠窗口策略是必要的。与实时的 FFT 频谱分析不同,窗口必须是矩形的,因为窗口的大小是人工网络输入层的宽度。对输入进行归一化试验,以使进入输入层的文本和数据以及时间分量的编码可以极大地改变训练速度、识别准确度、可靠性以及对日期和时间实例和关系的不同统计分布的适应性方面的结果.
如果想使用深度学习方法,你应该看看循环神经网络(RNN)。循环网络将考虑时间依赖性,并且可以检测到这在本周五属于日期时间,但不属于这个苹果。
作为一个简单的模型,您可以创建一个具有双向 LSTM 层(一种 RNN)的模型:
最长的部分将收集许多句子及其相应的解决方案,以创建训练/测试数据集。Keras可能是一个很好的框架,可以开始使用并提供许多示例。
如果您不想使用机器学习,您可以在 python 中使用日期时间解析器。下面给出几个例子。它将从给定的字符串返回格式化的日期时间。它适用于所有语言。
>>> import dateparser
>>> dateparser.parse('12/12/12')
datetime.datetime(2012, 12, 12, 0, 0)
>>> dateparser.parse(u'Fri, 12 Dec 2014 10:55:50')
datetime.datetime(2014, 12, 12, 10, 55, 50)
>>> dateparser.parse(u'Martes 21 de Octubre de 2014') # Spanish (Tuesday 21 October 2014)
datetime.datetime(2014, 10, 21, 0, 0)
>>> dateparser.parse(u'Le 11 Décembre 2014 à 09:00') # French (11 December 2014 at 09:00)
datetime.datetime(2014, 12, 11, 9, 0)
>>> dateparser.parse(u'13 января 2015 г. в 13:34') # Russian (13 January 2015 at 13:34)
datetime.datetime(2015, 1, 13, 13, 34)
>>> dateparser.parse(u'1 เดือนตุลาคม 2005, 1:00 AM') # Thai (1 October 2005, 1:00 AM)
datetime.datetime(2005, 10, 1, 1, 0)