-
-
Notifications
You must be signed in to change notification settings - Fork 441
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Feature request] 使用 tf.data API 重构数据输入管道 #398
Comments
如果有需要,我可以提供一个pull request。不过这个部分重构改动比较大,需要讨论一下代码结构组织等等。 |
目前 v2 分支已经通过 generator 实现了超大数据的加载和 shuffle. 不直接使用 tf.data 是因为发现 tf.data 和 processor 结合使用比较麻烦。可以参考一下 Kashgari/kashgari/generators.py Line 33 in 67de4f9
当然如果有更好的解决办法可以讨论看看的~ |
按照 Kashgari 理念,需要支持用户直接输入分词后的句子即可,后续构建词表 和 padding 等操作都需要内置实现。tf.data 对于不定长文本数据支持还是不够好,文档也不全。 |
能具体说一说吗?因我个人使用 另外,我个人感觉把词典构建和数据输入管道构建过程解耦开来会比较好。词典可以使用单独的一个工具来生成,然后Tokenizer负责加载词典进行分词、ID转化,数据输入管道利用Tokenizer,可以让用户直接提供原始文本,即可构建完整的训练输入管道。 |
解耦是可以的,但是解耦让用户自己处理了,那么市面上这种工具很多,Kashgari 的定位和存在就没有太多必要了。这个也是我一直坚持让用户能够使用文本数据直接 fit 的原因。 可以看看你的 seq2seq tf.data 构建代码么? |
TransformerTextFileDatasetBuilder 目前上面这个实现没有加入按照长度分桶。 可以在tensorflow/nmt找到例子。 |
如果对 Kashgari 改造,你的思路如何呢?可以讨论看看 |
我看你的代码已经大致完成了genrator构建输入管道。如果generator能解决上述问题,那就用generator吧。没必要再搞一套tf.data的。如果以后有遇到必须使用tf.data的场景,再来考虑这个事情。 |
嗯嗯,generator 更加灵活一些,顺便也帮忙多看看 TF2 版本还有没有什么问题~ 欢迎提更多的建议意见~ |
Is your feature request related to a problem? Please describe.
就如 #336 所描述的,训练数据很大内存无法加载所有训练数据的情况在实际应用中很常见,
generator
的方式其实也不是很灵活,例如在整个数据集上做shuffle
Describe the solution you'd like
使用
tf.data
API构建强大的高性能的数据输入管道Describe alternatives you've considered
Additional context
The text was updated successfully, but these errors were encountered: