我正在tensorflow中构建一个文本分类模型(尝试不同的架构,从BiLSTM到1DConvnet,等等)我的数据结构如下:
1文档语料库
由独立但上下文相似的多方对话记录(时间序列)组成的大约100个文档。
每个标记的文档约有200个话语(所有文档的标记约定相同
换句话说,它看起来像这样(标签结构看起来相同,但每个字符串有一个int ):
data = [
[
'hello how are you'
'i am good'
'whats the weather today'
...,
],
[
'how long have you had that cough'
'roughly 2 weeks'
'anything else'
...,
],
...,
]
现在,我通过扁平化所有文档,将数据作为字符串( data )和int(标签)的扁平列表输入到模型中。这是可行的,但我想知道这是否是处理我的数据的最佳方式。IIUC,使用任何类型的RNN都意味着我的模型正在“记住”以前的数据。但是,由于每个文档包含单独的对话,因此文档1中的文本不会影响文档2中的文本,依此类推。直观地说,因为每个文档都是一个独立的对话,所以我希望模型在对话结束时“记住”对话开始时发生的事情,但在进入下一个对话时“忘记”。这种直觉是正确的吗?
此场景中的最佳实践是什么?是否有办法一次输入一个文档(例如,将批量大小设置为文档长度?)?这会有什么不同吗,或者是一个扁平的列表是可行的?
谢谢。
发布于 2020-01-09 05:15:39
似乎你有一组对话,并希望将对话中的每一轮都归类到一些类别中。
一个类似的、经过充分研究的问题是对话行为分类。对话行为分类是根据话语在对话中所起的作用,即说话人正在执行的行为,对话语进行分类的任务。对话行为是言语行为的一种(言语行为理论见Austin (1975)和Searle (1969))。
论文“对话行为序列标记使用具有CRF的分层编码器”](https://arxiv.org/abs/1709.04250)有代码可用:GitHub。这是学术准则,但不是最清晰的。目前还不清楚他们使用的TF版本是什么。
RE:批量大小-他们使用batchSize = 2 (line)。对话有不同长度的发声。
我认为你应该读一下这篇论文,里面有很多相关的引文,比如
我们提出了一个分层递归编码器,其中第一个编码器在发声级别操作,对每个发声中的每个单词进行编码,第二个编码器在会话级别进行操作,根据前一个编码器的表示对会话中的每个发声进行编码。这两个编码器确保第二个编码器的输出捕获发声之间的依赖关系。
https://stackoverflow.com/questions/59620260
复制相似问题