├── .gitignore ├── README.md ├── data └── EC │ ├── dev.txt │ ├── dev │ ├── a.txt │ ├── id.txt │ ├── tags-iobes.txt │ └── tags.txt │ ├── ds_fa.txt │ ├── ds_pa.txt │ ├── ds_pa │ ├── a.txt │ ├── id.txt │ ├── tags-iobes.txt │ └── tags.txt │ ├── ner-iobes.tags.vocab │ ├── ner.embed.pth │ ├── ner.tags.vocab │ ├── ner.vocab │ ├── test.txt │ ├── test │ ├── a.txt │ ├── id.txt │ ├── tags-iobes.txt │ └── tags.txt │ ├── train.txt │ └── train │ ├── a.txt │ ├── id.txt │ ├── tags-iobes.txt │ └── tags.txt └── src ├── DSRL └── mytrainer.py ├── __init__.py ├── conlleval.py ├── constants.py ├── crf_LightNER.py ├── dataset.py ├── dsner.py ├── model.py ├── script └── preprocess-EC.py ├── trainer.py ├── utils.py ├── vocab.py └── weight_init.py /.gitignore: -------------------------------------------------------------------------------- 1 | # project 2 | data/EC/embeddings/ 3 | src/checkpoints/ 4 | src/DSRL/ 5 | 6 | # Byte-compiled / optimized / DLL files 7 | __pycache__/ 8 | *.py[cod] 9 | *$py.class 10 | 11 | # C extensions 12 | *.so 13 | 14 | # Distribution / packaging 15 | .Python 16 | build/ 17 | develop-eggs/ 18 | dist/ 19 | downloads/ 20 | eggs/ 21 | .eggs/ 22 | lib/ 23 | lib64/ 24 | parts/ 25 | sdist/ 26 | var/ 27 | wheels/ 28 | *.egg-info/ 29 | .installed.cfg 30 | *.egg 31 | MANIFEST 32 | 33 | # PyInstaller 34 | # Usually these files are written by a python script from a template 35 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 36 | *.manifest 37 | *.spec 38 | 39 | # Installer logs 40 | pip-log.txt 41 | pip-delete-this-directory.txt 42 | 43 | # Unit test / coverage reports 44 | htmlcov/ 45 | .tox/ 46 | .coverage 47 | .coverage.* 48 | .cache 49 | nosetests.xml 50 | coverage.xml 51 | *.cover 52 | .hypothesis/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | 62 | # Flask stuff: 63 | instance/ 64 | .webassets-cache 65 | 66 | # Scrapy stuff: 67 | .scrapy 68 | 69 | # Sphinx documentation 70 | docs/_build/ 71 | 72 | .DS_Store 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # pyenv 81 | .python-version 82 | 83 | # celery beat schedule file 84 | celerybeat-schedule 85 | 86 | # SageMath parsed files 87 | *.sage.py 88 | 89 | # Environments 90 | .env 91 | .venv 92 | env/ 93 | venv/ 94 | ENV/ 95 | env.bak/ 96 | venv.bak/ 97 | 98 | # Spyder project settings 99 | .spyderproject 100 | .spyproject 101 | 102 | # Rope project settings 103 | .ropeproject 104 | 105 | # mkdocs documentation 106 | /site 107 | 108 | # mypy 109 | .mypy_cache/ 110 | 111 | # IDEA 112 | .idea/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DNSER-pytorch 2 | Pytorch implementation of :https://github.com/rainarch/DSNER 3 | 4 | python 3.6 5 | 6 | pytorch 7 | 8 | First: python script/preprocess-EC 9 | 10 | main module: python dsner.py 11 | 12 | args parameters should be define based on the paper 13 | 14 | Result: Dev and Test respectively 15 | 16 | | Model | Setup | epoch | P | R | F1 | P | R | F1 | 17 | |--------------|-----------|-----------|-------|-------|-------|-------|-------|-------| 18 | |LSTM+CRF | H | 562 |66.30 %|64.21 %|65.24 %|63.64 %|62.53 %|63.08 %| 19 | |LSTM+CRF | H+A | 769 |67.80 %|58.53 %|62.82 %|63.65 %|53.59 %|58.19 %| 20 | |LSTm+CRF+SL | H+A | 538 |68.21 %|61.89 %|64.90 %|66.90 %|61.66 %|64.17 %| 21 | |LSTm+CRF+PA | H+A | 652 |62.21 %|70.11 %|65.93 %|61.12 %|67.63 %|64.21 %| 22 | |LSTm+CRF+PA+SL|H+A | 370 |69.12 %|71.16 %|70.12 %|63.46 %|63.94 %|63.70 %| 23 | 24 | Another paper which is used RL as a post-Processing for denoising with a different reward formula: 25 | 26 | Reinforcement-based denoising of distantly supervised NER with partial annotation : https://www.aclweb.org/anthology/D19-6125/ 27 | -------------------------------------------------------------------------------- /data/EC/dev/a.txt: -------------------------------------------------------------------------------- 1 | 想 买 件 牧 王 羊 绒 大 衣 修 身 款 , 朋 友 有 一 件 很 漂 亮 。 上 身 显 气 质 , 帅 气 。 就 是 找 不 到 。 请 问 我 怎 样 才 能 买 到 。 2 | 我 要 买 洋 酒 3 | 买 化 妆 品 什 么 行 就 是 买 衣 服 , 不 行 4 | 我 想 买 抹 茶 点 心 5 | 我 想 找 我 之 前 买 裤 子 的 商 户 , 可 是 我 找 不 到 哪 一 家 6 | 不 倒 绒 连 体 衣 7 | 想 买 件 短 外 套 , 女 8 | 休 闲 甜 美 9 | 胖 人 显 瘦 的 衣 服 10 | 凉 鞋 小 学 生 女 11 | 首 页 里 面 都 是 吃 的 , 在 哪 看 衣 服 呢 12 | 崖 柏 13 | 我 要 活 的 14 | 那 种 比 较 好 15 | 我 要 买 触 屏 生 命 树 手 表 16 | 查 看 物 流 17 | 夏 天 短 袖 18 | 像 丸 子 会 飞 的 汽 车 19 | 星 星 网 纱 上 配 小 皇 冠 20 | 骨 架 大 21 | 买 裤 子 不 知 道 自 己 是 多 大 的 腰 围 22 | 桃 红 23 | 外 套 中 款 24 | 手 工 制 作 相 册 25 | 厚 实 26 | 价 格 最 m s a t a 硬 盘 1 2 8 G 27 | 有 没 有 儿 童 双 人 手 推 车 28 | 运 动 鞋 子 29 | 水 壶 3 , 4 块 钱 的 30 | 电 脑 风 扇 31 | 香 水 女 32 | 我 要 1 段 奶 粉 33 | 魅 族 p r o 6 p l u s 34 | 数 字 电 视 天 线 35 | 国 产 的 36 | 牛 仔 衣 假 两 件 套 37 | 女 式 情 趣 用 品 38 | 以 后 不 要 给 我 推 荐 韩 货 , 任 何 韩 国 都 不 要 39 | 五 十 岁 爸 爸 装 40 | 茶 具 套 装 41 | 想 买 祛 斑 效 果 好 点 的 祛 斑 霜 42 | 鲁 花 花 生 油 43 | 小 糖 果 44 | 我 想 找 电 脑 板 , 找 不 到 45 | 我 要 买 原 创 服 装 46 | 祛 红 血 丝 47 | 防 热 垫 48 | 九 个 月 宝 宝 奶 粉 49 | 风 衣 外 套 50 | 双 人 床 51 | 薄 膜 粘 在 防 盗 门 上 应 该 用 什 么 产 品 清 洗 52 | 面 膜 美 白 53 | 大 功 率 54 | 我 想 找 一 款 包 55 | 买 苹 果 手 机 骗 钱 怎 么 办 56 | 婴 舒 宝 超 薄 拉 拉 裤 57 | 泡 爪 罐 装 58 | 男 式 休 闲 上 衣 59 | 童 装 时 尚 点 的 60 | 那 个 魅 族 m x 5 有 吗 ? 61 | 甜 水 果 62 | 我 想 找 二 手 苹 果 6 s p 手 机 63 | 我 要 买 铅 笔 盒 64 | 高 腰 白 色 蕾 丝 裙 65 | 裤 子 男 亮 色 , 宽 松 裤 子 男 长 裤 66 | 尖 头 小 白 鞋 67 | 电 蚊 拍 68 | 收 缩 69 | 黄 花 梨 70 | 你 推 荐 的 不 是 我 需 要 的 71 | 我 要 买 咬 咬 乐 72 | 适 合 4 0 岁 以 下 的 人 穿 的 风 衣 73 | 漂 亮 有 个 性 的 台 灯 74 | 买 Q 币 为 什 么 不 加 购 物 总 额 ? 75 | 花 格 衬 衫 76 | 原 味 77 | 购 买 洗 发 水 78 | 男 小 白 鞋 79 | 一 百 五 十 元 的 手 机 有 哪 些 80 | 中 年 的 81 | 女 运 动 服 大 码 82 | 华 尔 贝 矿 灯 , 充 电 后 久 用 , 最 好 的 83 | 蓝 牙 耳 机 上 的 副 耳 机 上 没 有 耳 帽 。 84 | 绿 色 卫 衣 配 什 么 外 套 好 看 啊 85 | 高 跟 鞋 86 | 有 妹 子 吗 87 | 我 不 要 看 什 么 宝 宝 的 书 还 没 结 婚 呢 88 | 要 2 0 岁 人 穿 的 裙 子 89 | 男 女 都 能 穿 的 外 套 , 好 看 的 90 | 华 为 荣 耀 m a g i c 好 看 的 套 91 | 便 宜 好 用 的 92 | 小 米 4 S 93 | 男 士 跑 步 鞋 , 透 气 性 好 的 94 | 拼 色 襯 衫 95 | 还 是 夜 光 鞋 呀 三 十 八 码 的 96 | 2 0 - 3 0 97 | 一 件 宽 松 时 尚 带 帽 子 的 女 士 卫 衣 98 | 免 洗 睡 眠 面 膜 99 | 白 色 尖 头 细 跟 高 跟 鞋 100 | 有 没 有 女 吃 的 伟 哥 101 | 变 色 口 红 102 | 哈 喽 运 动 裤 103 | 有 没 有 好 看 的 斜 挎 包 104 | 我 想 要 2 0 岁 的 浅 口 单 鞋 105 | 现 在 哪 款 手 机 好 用 106 | 去 鸡 皮 皂 107 | 我 要 买 h e l l o k i t y 美 妆 蛋 108 | 我 想 买 气 垫 109 | 亲 亲 , 您 是 想 要 咨 询 极 速 退 款 的 什 么 问 题 呢 ? 小 蜜 猜 您 想 知 道 的 一 定 在 下 面 , 直 接 点 击 查 看 吧 ~ 为 什 么 我 之 前 能 够 享 受 “ 极 速 退 款 ” , 现 在 却 不 可 以 ? 110 | 1 8 到 2 4 岁 111 | 1 0 0 以 下 112 | 喝 奶 奶 113 | 牛 津 背 包 114 | 袜 子 。 115 | 我 要 买 男 童 春 季 运 动 鞋 116 | 我 要 买 毛 孔 收 缩 液 117 | 待 产 包 什 么 牌 子 的 好 118 | 有 没 有 便 宜 的 工 作 服 119 | 仿 藤 120 | 芋 头 片 121 | 2 万 毫 安 移 动 电 源 122 | 适 合 胖 子 穿 的 裙 子 123 | 实 木 儿 童 床 124 | 复 古 磨 砂 大 框 防 辐 射 眼 镜 125 | 便 宜 的 棉 花 糖 机 126 | 我 要 找 黄 金 棒 127 | 找 好 货 , 伪 装 网 128 | 简 装 衣 柜 129 | 哺 乳 外 出 衣 130 | 我 要 买 好 一 点 的 被 子 131 | 求 婚 蜡 烛 132 | 我 想 要 一 条 背 带 裤 亲 133 | 办 公 室 养 水 培 植 物 好 还 是 土 培 植 物 好 ? 134 | 孕 妇 连 衣 裙 135 | 4 5 - 5 0 c m 毛 绒 玩 具 136 | 我 想 要 改 一 下 我 的 收 货 地 址 , 怎 么 改 小 蜜 ? 137 | 儿 童 帐 篷 138 | 我 想 买 铅 笔 裤 139 | 我 要 男 士 短 袖 140 | 我 要 买 正 宗 的 火 鸡 面 141 | 应 该 不 是 敏 感 肌 肤 142 | 我 要 买 鬼 火 一 代 天 使 眼 143 | 我 要 买 隔 离 气 垫 144 | 有 没 有 假 人 试 衣 服 145 | 他 就 说 , 那 你 只 能 呃 , 嗯 , 再 问 呃 , 既 然 停 产 了 , 我 怎 么 会 有 呢 , 就 是 一 直 用 反 问 的 语 气 , 去 跟 我 交 流 , 然 后 嗯 之 前 有 一 句 话 说 到 兔 子 质 量 好 , 托 跟 奥 迪 的 也 146 | 兰 瑟 B B 霜 147 | 不 是 , 有 什 么 推 荐 的 148 | 全 部 在 驱 风 油 , 我 要 买 149 | 要 淘 宝 点 卡 天 宏 一 卡 通 易 宝 接 口 150 | 素 描 本 151 | 氧 化 锌 乳 膏 这 个 脸 上 可 以 用 吗 有 没 有 激 素 152 | 耳 钉 收 纳 架 153 | 我 想 找 美 容 养 颜 , 然 后 减 肥 的 茶 154 | 我 想 找 鞋 柜 155 | 女 中 学 生 短 款 棉 服 薄 156 | P p s u 157 | 字 母 k 的 衣 服 158 | 荣 耀 159 | 要 最 新 款 160 | 男 士 夏 季 上 衣 161 | 宽 松 162 | 白 色 套 头 衫 163 | 全 自 动 洗 衣 机 9 公 斤 164 | 男 唇 膏 165 | 紧 身 T 恤 衫 男 166 | 意 外 险 167 | 我 想 买 联 系 不 上 168 | 我 想 买 把 打 鸟 枪 169 | 请 问 有 没 有 客 服 回 答 啊 170 | 我 想 买 小 卷 纸 171 | f f f 团 常 服 172 | 6 0 厘 米 的 真 皮 女 士 手 套 173 | 英 伦 学 生 鞋 174 | 需 要 买 什 么 来 换 呢 175 | 想 问 一 下 有 没 有 去 眼 黄 的 眼 药 水 176 | 黑 牛 177 | 我 想 买 9 9 0 耳 线 178 | 想 买 耐 克 蓝 球 鞋 179 | 我 想 泡 水 180 | 我 想 买 一 个 美 美 的 连 衣 裙 181 | 废 柴 修 仙 的 。 182 | 买 连 帽 外 套 女 183 | 我 想 要 投 诉 一 个 客 服 184 | 散 装 辣 条 185 | 小 米 移 动 电 源 186 | 吸 引 女 人 的 男 士 香 水 187 | 吃 货 的 世 界 188 | 史 酷 比 纸 尿 裤 189 | 简 约 水 桶 包 190 | 气 船 191 | 德 国 制 造 的 新 发 明 192 | 平 价 眼 影 193 | 胃 不 好 , 想 买 点 利 于 消 化 的 药 194 | 送 女 士 生 日 礼 物 送 啥 好 195 | 百 灵 草 修 复 霜 196 | 帮 我 推 荐 一 些 情 侣 T 恤 197 | 要 买 去 唇 部 死 皮 的 198 | 买 墨 水 笔 座 199 | 我 要 找 闲 鱼 网 200 | 给 爸 妈 送 礼 物 , 送 什 么 好 呢 ? 201 | 我 要 买 保 鲜 袋 小 号 202 | 口 紅 203 | 我 要 买 婴 儿 洗 头 204 | 我 要 买 婴 儿 粉 205 | 我 要 买 j o y f i s h 206 | 披 萨 饼 底 8 寸 多 少 钱 207 | 我 要 买 厨 房 用 纸 208 | 我 要 买 腋 下 止 汗 喷 雾 香 体 露 男 士 209 | 护 垫 护 舒 宝 多 少 钱 210 | 我 要 买 三 只 松 鼠 坚 果 大 礼 包 211 | 乐 而 雅 多 少 钱 212 | 我 要 买 真 知 棒 棒 棒 糖 213 | 我 要 买 好 奇 铂 金 装 m 214 | 我 要 买 筷 子 勺 子 215 | 我 要 买 办 公 216 | 我 要 买 良 品 铺 子 榴 莲 干 217 | 海 尔 电 视 多 少 钱 218 | 我 要 买 卫 生 巾 2 9 0 219 | 买 显 卡 220 | 我 要 买 新 安 怡 安 抚 奶 嘴 221 | 我 要 买 枪 手 杀 虫 气 雾 剂 222 | 鸭 脖 223 | 我 要 买 艾 艾 贴 224 | 我 要 买 产 妇 帽 225 | 博 朗 多 少 钱 226 | 我 要 买 海 天 招 牌 拌 饭 酱 227 | 我 要 买 爱 护 湿 巾 228 | 我 要 买 粉 刺 针 黑 头 针 229 | 我 要 的 是 面 膜 230 | 我 要 买 头 发 定 型 231 | 我 要 买 水 笔 中 性 笔 232 | 干 燥 剂 多 少 钱 233 | 船 袜 男 多 少 钱 234 | 我 要 买 学 步 裤 235 | 海 鸭 蛋 多 少 钱 236 | 我 要 买 东 古 237 | 我 要 买 鲁 花 葵 花 籽 油 238 | 我 要 买 妮 维 雅 走 珠 239 | 我 要 买 女 鞋 拖 240 | 我 要 买 老 干 妈 牛 肉 酱 241 | 文 胸 袋 洗 内 衣 专 用 洗 衣 袋 网 袋 多 少 钱 242 | 我 要 买 安 安 金 纯 沐 浴 露 243 | 雪 融 芝 士 多 少 钱 244 | 拉 拉 裤 x x x l 多 少 钱 245 | 墨 鱼 丸 多 少 钱 246 | 小 肥 羊 多 少 钱 247 | 我 要 买 无 糖 王 老 吉 248 | 我 要 买 美 发 梳 子 249 | 我 要 买 桌 面 250 | 熊 孩 子 食 品 多 少 钱 251 | 我 要 买 双 汇 鸡 肉 肠 252 | 我 要 买 红 茶 茶 叶 253 | 洗 衣 液 绿 伞 多 少 钱 254 | 我 要 买 深 层 清 洁 洗 面 奶 255 | 买 裙 子 256 | 脆 骨 烤 肠 多 少 钱 257 | 大 米 5 k g 天 猫 超 市 多 少 钱 258 | 我 要 买 牙 杯 洗 漱 杯 259 | 我 要 买 化 妆 品 套 装 260 | 我 要 买 炒 菜 铲 子 261 | 番 茄 酱 亨 氏 多 少 钱 262 | 我 要 买 利 达 263 | 我 要 买 英 氏 宝 宝 肉 松 辅 食 婴 儿 肉 松 牛 肉 松 264 | 婴 儿 面 条 宝 宝 辅 食 蝴 蝶 面 多 少 钱 265 | 我 要 买 韩 国 辣 椒 酱 266 | 无 糖 食 品 多 少 钱 267 | 心 心 相 印 湿 巾 多 少 钱 268 | 連 衣 裙 269 | 呀 土 豆 4 0 g 多 少 钱 270 | 我 要 买 麦 片 金 味 271 | 格 力 变 频 空 调 多 少 钱 272 | 鸭 血 多 少 钱 273 | 籼 米 多 少 钱 274 | 塔 塔 粉 多 少 钱 275 | 袜 子 女 船 袜 多 少 钱 276 | 我 要 买 电 动 刷 头 277 | 红 色 小 象 多 少 钱 278 | 我 要 买 兔 肉 279 | 我 要 买 纯 木 植 护 280 | 艾 诗 多 少 钱 281 | 熏 肉 多 少 钱 282 | 我 要 买 洗 头 水 女 283 | 蓝 泡 泡 洁 厕 宝 多 少 钱 284 | 加 加 生 抽 多 少 钱 285 | 爱 生 活 多 少 钱 286 | 全 脂 奶 粉 287 | 我 要 买 美 素 288 | 我 要 买 全 面 时 代 289 | 我 要 买 好 爸 爸 洗 衣 皂 290 | 我 要 买 酸 奶 发 酵 菌 1 0 菌 双 歧 杆 菌 益 生 菌 粉 291 | 我 要 买 丝 蕴 套 装 292 | 金 星 啤 酒 多 少 钱 293 | 美 式 咖 啡 多 少 钱 294 | 我 要 买 毛 巾 纱 布 295 | 婴 儿 爽 身 粉 多 少 钱 296 | 康 元 手 指 饼 干 多 少 钱 297 | 木 头 勺 子 多 少 钱 298 | 灭 蚊 灯 多 少 钱 299 | 水 果 牙 签 多 少 钱 300 | 椰 浆 多 少 钱 301 | 我 要 买 好 奇 铂 金 装 n b 302 | 益 昌 多 少 钱 303 | 牛 奶 光 明 多 少 钱 304 | 舒 适 达 美 白 配 方 抗 敏 感 牙 膏 多 少 钱 305 | 我 要 买 辣 的 零 食 306 | 葱 油 花 卷 多 少 钱 307 | 我 要 买 肉 枣 308 | 凉 水 多 少 钱 309 | 梦 之 蓝 m 3 多 少 钱 310 | 我 要 买 惠 氏 启 赋 1 段 311 | 君 乐 宝 纯 牛 奶 多 少 钱 312 | 脆 面 多 少 钱 313 | 我 要 买 雀 巢 威 化 巧 克 力 314 | 烟 灰 缸 家 用 多 少 钱 315 | 我 要 买 牙 膏 牙 刷 套 装 316 | 我 要 买 席 子 317 | 荷 兰 乳 牛 多 少 钱 318 | 百 加 得 黑 朗 姆 酒 多 少 钱 319 | 儿 童 碗 餐 具 防 摔 多 少 钱 320 | 我 要 买 进 口 牛 奶 2 5 0 m l 321 | 启 初 婴 儿 保 湿 露 多 少 钱 322 | 我 要 买 米 奇 323 | 我 要 买 莲 子 324 | 我 要 买 咯 吱 脆 325 | 奶 粉 三 段 多 少 钱 326 | 我 要 买 豆 沙 粽 子 327 | 我 要 买 乐 视 手 机 328 | 厦 门 泡 面 多 少 钱 329 | 我 要 买 罐 330 | 卫 生 巾 超 市 多 少 钱 331 | 麦 吉 士 山 核 桃 小 酥 多 少 钱 332 | 我 要 买 披 萨 芝 士 333 | 泡 面 锅 多 少 钱 334 | 破 洞 牛 仔 裤 335 | 凉 粉 仙 草 多 少 钱 336 | 我 要 买 按 摩 椅 337 | 短 袖 多 少 钱 338 | 我 要 买 密 码 箱 339 | 我 要 买 安 儿 乐 x l 340 | 我 要 买 维 341 | 我 要 买 薯 片 黄 瓜 342 | 我 要 买 菜 板 抗 菌 343 | 方 便 面 酸 豆 角 多 少 钱 344 | 罗 马 仕 345 | 我 要 买 有 友 猪 皮 346 | 染 发 剂 欧 莱 雅 多 少 钱 347 | 学 步 多 少 钱 348 | 我 要 买 襄 阳 卧 龙 锅 巴 349 | 贝 奇 野 菜 多 少 钱 350 | 广 东 潮 汕 特 产 多 少 钱 351 | 哺 乳 衣 352 | 好 奇 m 多 少 钱 353 | 漂 亮 连 衣 裙 354 | 我 要 买 笔 记 本 355 | 我 要 买 人 参 356 | 李 锦 记 醋 多 少 钱 357 | 我 要 买 洽 洽 小 而 香 西 瓜 子 358 | 纱 布 毛 巾 多 少 钱 359 | 我 要 买 豆 腐 皮 360 | 水 瓶 多 少 钱 361 | 沐 浴 露 362 | 我 要 买 猪 鼻 贴 363 | 百 草 味 爆 米 花 多 少 钱 364 | 我 要 买 一 次 性 口 罩 365 | 我 要 买 广 东 特 产 366 | 我 要 买 富 安 娜 367 | 我 要 买 胶 棉 拖 把 头 368 | 养 元 青 洗 发 水 多 少 钱 369 | 我 要 买 雄 鸡 标 370 | 我 要 买 海 苔 薄 脆 饼 干 371 | 我 要 买 生 鲜 肉 类 372 | 洗 内 衣 多 少 钱 373 | 我 要 买 冰 淇 淋 雪 糕 374 | 我 要 买 不 锈 钢 饭 盒 375 | 帮 宝 适 拉 拉 裤 x x l 多 少 钱 376 | 美 素 佳 儿 多 少 钱 377 | 我 要 买 抑 汗 378 | 洗 面 奶 旅 行 装 多 少 钱 379 | 大 码 380 | 加 菲 猫 婴 儿 沐 浴 露 多 少 钱 381 | 我 要 买 婴 儿 零 食 382 | 我 要 买 加 热 饭 盒 383 | 半 拖 鞋 384 | 男 士 保 湿 多 少 钱 385 | 新 西 兰 苹 果 多 少 钱 386 | 我 要 买 牙 签 387 | 我 要 买 干 粮 零 食 388 | 蛋 黄 酥 多 少 钱 389 | 我 要 买 果 干 类 390 | 手 撕 面 包 整 箱 多 少 钱 391 | 无 芯 卷 筒 纸 家 用 卫 生 纸 多 少 钱 392 | 我 要 买 鞋 子 收 纳 包 393 | 骁 龙 8 2 0 394 | 我 要 买 竹 签 395 | 辣 酱 拌 饭 酱 多 少 钱 396 | 我 要 买 胡 豆 397 | 我 要 买 三 只 松 鼠 爆 米 花 398 | 保 鲜 碗 多 少 钱 399 | 我 要 买 话 梅 棒 棒 糖 400 | 补 钙 多 少 钱 401 | -------------------------------------------------------------------------------- /data/EC/dev/id.txt: -------------------------------------------------------------------------------- 1 | 0 2 | 1 3 | 2 4 | 3 5 | 4 6 | 5 7 | 6 8 | 7 9 | 8 10 | 9 11 | 10 12 | 11 13 | 12 14 | 13 15 | 14 16 | 15 17 | 16 18 | 17 19 | 18 20 | 19 21 | 20 22 | 21 23 | 22 24 | 23 25 | 24 26 | 25 27 | 26 28 | 27 29 | 28 30 | 29 31 | 30 32 | 31 33 | 32 34 | 33 35 | 34 36 | 35 37 | 36 38 | 37 39 | 38 40 | 39 41 | 40 42 | 41 43 | 42 44 | 43 45 | 44 46 | 45 47 | 46 48 | 47 49 | 48 50 | 49 51 | 50 52 | 51 53 | 52 54 | 53 55 | 54 56 | 55 57 | 56 58 | 57 59 | 58 60 | 59 61 | 60 62 | 61 63 | 62 64 | 63 65 | 64 66 | 65 67 | 66 68 | 67 69 | 68 70 | 69 71 | 70 72 | 71 73 | 72 74 | 73 75 | 74 76 | 75 77 | 76 78 | 77 79 | 78 80 | 79 81 | 80 82 | 81 83 | 82 84 | 83 85 | 84 86 | 85 87 | 86 88 | 87 89 | 88 90 | 89 91 | 90 92 | 91 93 | 92 94 | 93 95 | 94 96 | 95 97 | 96 98 | 97 99 | 98 100 | 99 101 | 100 102 | 101 103 | 102 104 | 103 105 | 104 106 | 105 107 | 106 108 | 107 109 | 108 110 | 109 111 | 110 112 | 111 113 | 112 114 | 113 115 | 114 116 | 115 117 | 116 118 | 117 119 | 118 120 | 119 121 | 120 122 | 121 123 | 122 124 | 123 125 | 124 126 | 125 127 | 126 128 | 127 129 | 128 130 | 129 131 | 130 132 | 131 133 | 132 134 | 133 135 | 134 136 | 135 137 | 136 138 | 137 139 | 138 140 | 139 141 | 140 142 | 141 143 | 142 144 | 143 145 | 144 146 | 145 147 | 146 148 | 147 149 | 148 150 | 149 151 | 150 152 | 151 153 | 152 154 | 153 155 | 154 156 | 155 157 | 156 158 | 157 159 | 158 160 | 159 161 | 160 162 | 161 163 | 162 164 | 163 165 | 164 166 | 165 167 | 166 168 | 167 169 | 168 170 | 169 171 | 170 172 | 171 173 | 172 174 | 173 175 | 174 176 | 175 177 | 176 178 | 177 179 | 178 180 | 179 181 | 180 182 | 181 183 | 182 184 | 183 185 | 184 186 | 185 187 | 186 188 | 187 189 | 188 190 | 189 191 | 190 192 | 191 193 | 192 194 | 193 195 | 194 196 | 195 197 | 196 198 | 197 199 | 198 200 | 199 201 | 200 202 | 201 203 | 202 204 | 203 205 | 204 206 | 205 207 | 206 208 | 207 209 | 208 210 | 209 211 | 210 212 | 211 213 | 212 214 | 213 215 | 214 216 | 215 217 | 216 218 | 217 219 | 218 220 | 219 221 | 220 222 | 221 223 | 222 224 | 223 225 | 224 226 | 225 227 | 226 228 | 227 229 | 228 230 | 229 231 | 230 232 | 231 233 | 232 234 | 233 235 | 234 236 | 235 237 | 236 238 | 237 239 | 238 240 | 239 241 | 240 242 | 241 243 | 242 244 | 243 245 | 244 246 | 245 247 | 246 248 | 247 249 | 248 250 | 249 251 | 250 252 | 251 253 | 252 254 | 253 255 | 254 256 | 255 257 | 256 258 | 257 259 | 258 260 | 259 261 | 260 262 | 261 263 | 262 264 | 263 265 | 264 266 | 265 267 | 266 268 | 267 269 | 268 270 | 269 271 | 270 272 | 271 273 | 272 274 | 273 275 | 274 276 | 275 277 | 276 278 | 277 279 | 278 280 | 279 281 | 280 282 | 281 283 | 282 284 | 283 285 | 284 286 | 285 287 | 286 288 | 287 289 | 288 290 | 289 291 | 290 292 | 291 293 | 292 294 | 293 295 | 294 296 | 295 297 | 296 298 | 297 299 | 298 300 | 299 301 | 300 302 | 301 303 | 302 304 | 303 305 | 304 306 | 305 307 | 306 308 | 307 309 | 308 310 | 309 311 | 310 312 | 311 313 | 312 314 | 313 315 | 314 316 | 315 317 | 316 318 | 317 319 | 318 320 | 319 321 | 320 322 | 321 323 | 322 324 | 323 325 | 324 326 | 325 327 | 326 328 | 327 329 | 328 330 | 329 331 | 330 332 | 331 333 | 332 334 | 333 335 | 334 336 | 335 337 | 336 338 | 337 339 | 338 340 | 339 341 | 340 342 | 341 343 | 342 344 | 343 345 | 344 346 | 345 347 | 346 348 | 347 349 | 348 350 | 349 351 | 350 352 | 351 353 | 352 354 | 353 355 | 354 356 | 355 357 | 356 358 | 357 359 | 358 360 | 359 361 | 360 362 | 361 363 | 362 364 | 363 365 | 364 366 | 365 367 | 366 368 | 367 369 | 368 370 | 369 371 | 370 372 | 371 373 | 372 374 | 373 375 | 374 376 | 375 377 | 376 378 | 377 379 | 378 380 | 379 381 | 380 382 | 381 383 | 382 384 | 383 385 | 384 386 | 385 387 | 386 388 | 387 389 | 388 390 | 389 391 | 390 392 | 391 393 | 392 394 | 393 395 | 394 396 | 395 397 | 396 398 | 397 399 | 398 400 | 399 401 | -------------------------------------------------------------------------------- /data/EC/dev/tags-iobes.txt: -------------------------------------------------------------------------------- 1 | O O O B-pp E-pp B-yl E-yl B-cp E-cp O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O 2 | O O O B-cp E-cp 3 | O B-cp I-cp E-cp O O O O O O B-cp E-cp O O O 4 | O O O O O B-cp E-cp 5 | O O O O O O O B-cp E-cp O O O O O O O O O O O O O 6 | O O O B-cp I-cp E-cp 7 | O O O O B-cp E-cp O O 8 | O O O O 9 | O O O O O B-cp E-cp 10 | B-cp E-cp O O O O 11 | O O O O O O O O O O O O B-cp E-cp O 12 | B-cp E-cp 13 | O O O O 14 | O O O O O 15 | O O O O O O O O B-cp E-cp 16 | O O O O 17 | O O B-cp E-cp 18 | O O O O O O B-cp E-cp 19 | O O O O O O O O O 20 | O O O 21 | O B-cp E-cp O O O O O O O O O O O 22 | O O 23 | B-cp E-cp O O 24 | O O O O B-cp E-cp 25 | O O 26 | O O O O O O O O B-cp E-cp B-gg I-gg I-gg E-gg 27 | O O O O O O O B-cp I-cp E-cp 28 | O O B-cp E-cp 29 | B-cp E-cp O O O O O O 30 | B-cp I-cp I-cp E-cp 31 | B-cp E-cp O 32 | O O O O B-cp E-cp 33 | B-pp E-pp B-xh I-xh I-xh I-xh I-xh I-xh I-xh E-xh 34 | O O O O B-cp E-cp 35 | O O O 36 | B-cp I-cp E-cp O B-cp I-cp E-cp 37 | O O B-cp I-cp I-cp E-cp 38 | O O O O O O O O O O O O O O O O O O 39 | O O O B-cp I-cp E-cp 40 | B-cp I-cp I-cp E-cp 41 | O O O O O O O O O B-cp I-cp E-cp 42 | B-pp E-pp B-cp I-cp E-cp 43 | O B-cp E-cp 44 | O O O B-cp I-cp E-cp O O O O 45 | O O O O O B-cp E-cp 46 | O O O O 47 | B-cp I-cp E-cp 48 | O O O B-cp I-cp I-cp E-cp 49 | B-cp E-cp B-cp E-cp 50 | B-cp I-cp E-cp 51 | O O O O O O O O O O O O O O O O O 52 | B-cp E-cp O O 53 | O O O 54 | O O O O O S-cp 55 | O B-pp E-pp B-cp E-cp O O O O O 56 | B-pp I-pp E-pp O O B-cp I-cp E-cp 57 | B-cp E-cp O O O 58 | O O O O B-cp E-cp 59 | B-cp E-cp O O O O 60 | O O B-pp E-pp B-xh I-xh E-xh O O O 61 | O B-cp E-cp 62 | O O O O O B-pp E-pp B-xh I-xh E-xh B-cp E-cp 63 | O O O B-cp I-cp E-cp 64 | O O O O B-cp I-cp E-cp 65 | B-cp E-cp O O O O O O B-cp E-cp O B-cp E-cp 66 | O O O O S-cp 67 | B-cp I-cp E-cp 68 | O O 69 | B-yl I-yl E-yl 70 | O O O O O O O O O O 71 | O O O B-cp I-cp E-cp 72 | O O O O O O O O O O O B-cp E-cp 73 | O O O O O O B-cp E-cp 74 | O B-cp E-cp O O O O O O O O O O 75 | O O B-cp E-cp 76 | O O 77 | O O B-cp I-cp E-cp 78 | O O O S-cp 79 | O O O O O O B-cp E-cp O O O 80 | O O O 81 | O B-cp I-cp E-cp O O 82 | B-pp I-pp E-pp B-cp E-cp O O O O O O O O O O 83 | O O B-cp E-cp O O O B-cp E-cp O O O B-cp E-cp O 84 | O O B-cp E-cp O O O B-cp E-cp O O O 85 | B-cp I-cp E-cp 86 | O O O O 87 | O O O O O O O O O S-cp O O O O O 88 | O O O O O O O B-cp E-cp 89 | O O O O O O B-cp E-cp O O O O 90 | B-pp E-pp B-pp E-pp B-xh I-xh I-xh I-xh E-xh O O O S-cp 91 | O O O O O 92 | B-pp E-pp B-xh E-xh 93 | O O B-cp I-cp E-cp O O O O O O 94 | O O B-cp E-cp 95 | O O B-cp I-cp E-cp O B-gg I-gg I-gg E-gg O 96 | O O O O O 97 | O O O O O O O O O O O O B-cp E-cp 98 | O O O O B-cp E-cp 99 | O O O O O O B-cp I-cp E-cp 100 | O O O O O O B-cp E-cp 101 | O O B-cp E-cp 102 | O O B-cp I-cp E-cp 103 | O O O O O O B-cp I-cp E-cp 104 | O O O O O O O B-cp I-cp I-cp E-cp 105 | O O O O B-cp E-cp O O 106 | O O O S-cp 107 | O O O B-pp I-pp I-pp I-pp I-pp I-pp I-pp I-pp I-pp E-pp B-cp I-cp E-cp 108 | O O O B-cp E-cp 109 | O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O 110 | O O O O O O 111 | O O O O O 112 | O O O 113 | O O B-cp E-cp 114 | B-cp E-cp O 115 | O O O O O O O B-cp I-cp E-cp 116 | O O O B-cp I-cp I-cp I-cp E-cp 117 | B-cp I-cp E-cp O O O O O O 118 | O O O O O O B-cp I-cp E-cp 119 | O O 120 | B-cp I-cp E-cp 121 | B-gg I-gg I-gg E-gg B-cp I-cp I-cp E-cp 122 | O O O O O O B-cp E-cp 123 | B-yl E-yl B-cp I-cp E-cp 124 | O O O O O O O O O B-cp E-cp 125 | O O O B-cp I-cp I-cp E-cp 126 | O O O B-cp I-cp E-cp 127 | O O O O O O O 128 | O O B-cp E-cp 129 | B-cp I-cp I-cp I-cp E-cp 130 | O O O O O O O B-cp E-cp 131 | O O B-cp E-cp 132 | O O O O O B-cp I-cp E-cp O 133 | O O O O B-cp I-cp I-cp E-cp O O O B-cp I-cp I-cp E-cp O O 134 | O O B-cp I-cp E-cp 135 | B-gg I-gg I-gg I-gg I-gg I-gg E-gg B-cp I-cp I-cp E-cp 136 | O O O O O O O O O O O O O O O O O O O 137 | B-cp I-cp I-cp E-cp 138 | O O O B-cp I-cp E-cp 139 | O O O O O O 140 | O O O O O O B-cp I-cp E-cp 141 | O O O O O O O O 142 | O O O B-xh I-xh I-xh E-xh B-cp I-cp E-cp 143 | O O O O O O B-cp E-cp 144 | O O O O O O B-cp E-cp 145 | O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B-pp E-pp O O 146 | B-pp E-pp B-cp I-cp E-cp 147 | O O O O O O O O O 148 | O O O B-cp I-cp E-cp O O O O 149 | O O O B-cp E-cp B-cp I-cp I-cp I-cp E-cp O O O O O 150 | B-cp I-cp E-cp 151 | O O O B-cp E-cp O O O O O O O O O O O O O 152 | B-cp I-cp I-cp I-cp E-cp 153 | O O O O O O O O O O O O O S-cp 154 | O O O B-cp E-cp 155 | O O O O O O B-cp E-cp O 156 | B-yl I-yl I-yl E-yl 157 | O O O O B-cp E-cp 158 | B-pp E-pp 159 | O O O O 160 | O O O O B-cp E-cp 161 | O O 162 | O O B-cp I-cp E-cp 163 | O O O B-cp I-cp E-cp B-gg I-gg E-gg 164 | O B-cp E-cp 165 | O O B-cp I-cp E-cp O 166 | B-cp I-cp E-cp 167 | O O O O O O O 168 | O O O O B-cp I-cp E-cp 169 | O O O O O O O O O O 170 | O O O O B-cp E-cp 171 | O O O O B-cp E-cp 172 | B-gg I-gg I-gg E-gg O B-yl E-yl O O B-cp E-cp 173 | O O O O S-cp 174 | O O O O O O O O 175 | O O O O O O O O O O O B-cp I-cp E-cp 176 | O O 177 | O O O B-xh I-xh E-xh B-cp E-cp 178 | O O B-pp E-pp B-cp I-cp E-cp 179 | O O O O 180 | O O O O O O O O B-cp I-cp E-cp 181 | O O O O O O 182 | O O O B-cp E-cp O 183 | O O O O O O O O O 184 | O O B-cp E-cp 185 | B-pp E-pp B-cp I-cp I-cp E-cp 186 | O O O O O O O B-cp E-cp 187 | O O O O O 188 | B-pp I-pp E-pp B-cp I-cp E-cp 189 | O O B-cp I-cp E-cp 190 | B-cp E-cp 191 | O O O O O O O O 192 | O O B-cp E-cp 193 | O O O O O O O O O O O O S-cp 194 | O O O O O O O O O O 195 | B-yl I-yl E-yl B-cp I-cp E-cp 196 | O O O O O O O O B-cp E-cp 197 | O O O O O O O O 198 | O O O B-cp E-cp 199 | O O O O O O 200 | O O O O O O O O O O O O O 201 | O O O B-cp I-cp E-cp O O 202 | B-cp E-cp 203 | O O O O O O O 204 | O O O B-cp I-cp E-cp 205 | O O O B-pp I-pp I-pp I-pp I-pp I-pp E-pp 206 | B-cp I-cp I-cp E-cp B-gg E-gg O O O 207 | O O O B-cp I-cp I-cp E-cp 208 | O O O O O B-cp I-cp I-cp E-cp O B-cp I-cp E-cp O O O 209 | B-cp E-cp B-pp I-pp E-pp O O O 210 | O O O B-pp I-pp I-pp E-pp O B-cp E-cp O O O O 211 | B-pp I-pp E-pp O O O 212 | O O O B-pp I-pp E-pp B-cp I-cp E-cp 213 | O O O B-pp E-pp B-xh I-xh E-xh S-gg 214 | O O O B-cp E-cp O B-cp E-cp 215 | O O O O O 216 | O O O B-pp I-pp I-pp E-pp B-cp I-cp E-cp 217 | B-pp E-pp B-cp E-cp O O O 218 | O O O B-cp I-cp E-cp O O O O 219 | O B-cp E-cp 220 | O O O B-pp I-pp E-pp B-cp I-cp I-cp E-cp 221 | O O O B-pp E-pp B-cp I-cp I-cp I-cp E-cp 222 | B-cp E-cp 223 | O O O B-cp I-cp E-cp 224 | O O O B-cp I-cp E-cp 225 | B-pp E-pp O O O 226 | O O O B-pp E-pp O O B-cp I-cp E-cp 227 | O O O B-pp E-pp B-cp E-cp 228 | O O O B-cp I-cp E-cp B-cp I-cp E-cp 229 | O O O O B-cp E-cp 230 | O O O O O O O 231 | O O O B-cp E-cp O B-cp I-cp E-cp 232 | B-cp I-cp E-cp O O O 233 | B-cp E-cp O O O O 234 | O O O B-cp I-cp E-cp 235 | B-cp I-cp E-cp O O O 236 | O O O B-pp E-pp 237 | O O O B-pp E-pp B-cp I-cp I-cp E-cp 238 | O O O B-pp I-pp E-pp B-cp E-cp 239 | O O O O B-cp E-cp 240 | O O O B-pp I-pp E-pp B-cp I-cp E-cp 241 | B-cp I-cp E-cp O O O O O B-cp I-cp E-cp B-cp E-cp O O O 242 | O O O B-pp I-pp I-pp E-pp B-cp I-cp E-cp 243 | B-cp I-cp I-cp E-cp O O O 244 | B-cp I-cp E-cp B-gg I-gg I-gg E-gg O O O 245 | B-cp I-cp E-cp O O O 246 | B-pp I-pp E-pp O O O 247 | O O O O O B-cp I-cp E-cp 248 | O O O O O B-cp E-cp 249 | O O O B-cp E-cp 250 | B-pp I-pp E-pp B-cp E-cp O O O 251 | O O O B-pp E-pp B-cp I-cp E-cp 252 | O O O B-cp I-cp I-cp E-cp 253 | B-cp I-cp E-cp B-pp E-pp O O O 254 | O O O O O O O B-cp I-cp E-cp 255 | O B-cp E-cp 256 | B-cp I-cp I-cp E-cp O O O 257 | B-cp E-cp B-gg I-gg E-gg O O O O O O O O 258 | O O O B-cp E-cp B-cp I-cp E-cp 259 | O O O B-cp I-cp E-cp B-cp E-cp 260 | O O O B-cp I-cp I-cp E-cp 261 | B-cp I-cp E-cp O B-pp E-pp O O O 262 | O O O B-pp E-pp 263 | O O O B-pp E-pp B-cp I-cp I-cp E-cp O O O B-cp I-cp I-cp E-cp B-cp I-cp E-cp 264 | B-cp I-cp I-cp E-cp B-cp I-cp I-cp E-cp B-cp I-cp E-cp O O O 265 | O O O O O B-cp I-cp E-cp 266 | B-cp I-cp I-cp E-cp O O O 267 | B-pp I-pp I-pp E-pp B-cp E-cp O O O 268 | B-cp I-cp E-cp 269 | B-cp I-cp E-cp B-gg I-gg E-gg O O O 270 | O O O B-cp E-cp B-pp E-pp 271 | B-pp E-pp B-cp I-cp I-cp E-cp O O O 272 | B-cp E-cp O O O 273 | B-cp E-cp O O O 274 | B-cp I-cp E-cp O O O 275 | B-cp E-cp O O O B-cp E-cp O O O 276 | O O O B-cp I-cp I-cp E-cp 277 | B-pp I-pp I-pp E-pp O O O 278 | O O O B-cp E-cp 279 | O O O B-cp I-cp I-cp E-cp 280 | B-pp E-pp O O O 281 | B-cp E-cp O O O 282 | O O O B-cp I-cp E-cp O 283 | B-cp I-cp E-cp B-cp I-cp E-cp O O O 284 | B-pp E-pp B-cp E-cp O O O 285 | B-pp I-pp E-pp O O O 286 | B-cp I-cp I-cp E-cp 287 | O O O B-pp E-pp 288 | O O O B-pp I-pp I-pp E-pp 289 | O O O B-pp I-pp E-pp B-cp I-cp E-cp 290 | O O O B-cp E-cp O O O O O O O O O O B-cp I-cp I-cp E-cp 291 | O O O B-pp E-pp B-cp E-cp 292 | B-pp E-pp B-cp E-cp O O O 293 | B-cp I-cp I-cp E-cp O O O 294 | O O O B-cp E-cp B-cp E-cp 295 | B-cp I-cp I-cp I-cp E-cp O O O 296 | B-pp E-pp B-cp I-cp I-cp E-cp O O O 297 | B-yl E-yl B-cp E-cp O O O 298 | B-cp I-cp E-cp O O O 299 | B-cp I-cp I-cp E-cp O O O 300 | B-cp E-cp O O O 301 | O O O B-pp E-pp B-xh I-xh E-xh B-gg E-gg 302 | B-pp E-pp O O O 303 | B-cp E-cp O B-pp E-pp O O O 304 | B-pp I-pp E-pp O O O O O O O B-cp E-cp O O O 305 | O O O O O B-cp E-cp 306 | B-cp I-cp I-cp E-cp O O O 307 | O O O B-cp E-cp 308 | B-cp E-cp O O O 309 | B-cp I-cp E-cp B-xh E-xh O O O 310 | O O O B-pp E-pp B-xh E-xh O O 311 | B-pp I-pp E-pp B-cp I-cp E-cp O O O 312 | B-cp E-cp O O O 313 | O O O B-pp E-pp B-cp I-cp I-cp I-cp E-cp 314 | B-cp I-cp E-cp O O O O O 315 | O O O B-cp E-cp B-cp E-cp B-cp E-cp 316 | O O O B-cp E-cp 317 | B-cp I-cp I-cp E-cp O O O 318 | B-pp I-pp E-pp B-cp I-cp I-cp E-cp O O O 319 | B-cp I-cp E-cp B-cp E-cp O O O O O 320 | O O O O O B-cp E-cp B-gg I-gg I-gg I-gg E-gg 321 | B-pp E-pp B-cp I-cp I-cp I-cp E-cp O O O 322 | O O O O O 323 | O O O B-cp E-cp 324 | O O O B-xh I-xh E-xh 325 | B-cp E-cp O O O O O 326 | O O O B-cp I-cp I-cp E-cp 327 | O O O B-pp E-pp B-cp E-cp 328 | B-pp E-pp B-cp E-cp O O O 329 | O O O S-cp 330 | B-cp I-cp E-cp O O O O O 331 | B-pp I-pp E-pp B-cp I-cp I-cp I-cp E-cp O O O 332 | O O O B-cp E-cp B-cp E-cp 333 | B-cp I-cp E-cp O O O 334 | O O B-cp I-cp E-cp 335 | B-cp E-cp O B-cp E-cp O O O 336 | O O O B-cp I-cp E-cp 337 | O O O O O 338 | O O O B-cp I-cp E-cp 339 | O O O B-pp I-pp E-pp B-gg E-gg 340 | O O O O 341 | O O O B-cp E-cp O O 342 | O O O B-cp E-cp O O 343 | B-cp I-cp E-cp O B-cp I-cp E-cp O O O 344 | B-pp I-pp E-pp 345 | O O O B-pp E-pp B-cp E-cp 346 | B-cp I-cp E-cp O B-pp I-pp E-pp O O O 347 | O O O O O 348 | O O O O O B-pp E-pp B-cp E-cp 349 | B-cp I-cp I-cp E-cp O O O 350 | O O O O O O O O O 351 | B-cp I-cp E-cp 352 | B-pp E-pp S-gg O O O 353 | O O B-cp I-cp E-cp 354 | O O O B-cp I-cp E-cp 355 | O O O B-cp E-cp 356 | B-pp I-pp E-pp S-cp O O O 357 | O O O B-pp E-pp B-xh I-xh E-xh B-cp I-cp E-cp 358 | B-yl E-yl B-cp E-cp O O O 359 | O O O B-cp I-cp E-cp 360 | B-cp E-cp O O O 361 | B-cp I-cp E-cp 362 | O O O B-cp I-cp E-cp 363 | B-pp I-pp E-pp B-cp I-cp E-cp O O O 364 | O O O B-cp I-cp I-cp I-cp E-cp 365 | O O O B-cp I-cp I-cp E-cp 366 | O O O B-pp I-pp E-pp 367 | O O O B-yl E-yl B-cp I-cp E-cp 368 | B-pp I-pp E-pp B-cp I-cp E-cp O O O 369 | O O O B-pp I-pp E-pp 370 | O O O O O B-cp I-cp I-cp E-cp 371 | O O O B-cp I-cp I-cp E-cp 372 | O B-cp E-cp O O O 373 | O O O B-cp I-cp E-cp B-cp E-cp 374 | O O O B-yl I-yl E-yl B-cp E-cp 375 | B-pp I-pp E-pp B-cp I-cp E-cp B-gg I-gg E-gg O O O 376 | B-pp I-pp I-pp E-pp O O O 377 | O O O O O 378 | B-cp I-cp E-cp O O O O O O 379 | O O 380 | B-pp I-pp E-pp O B-cp I-cp I-cp I-cp E-cp O O O 381 | O O O B-cp I-cp I-cp E-cp 382 | O O O B-cp I-cp I-cp E-cp 383 | O B-cp E-cp 384 | O O O O O O O 385 | O O O B-cp E-cp O O O 386 | O O O B-cp E-cp 387 | O O O B-cp E-cp B-cp E-cp 388 | B-cp I-cp E-cp O O O 389 | O O O B-cp E-cp O 390 | B-cp I-cp I-cp E-cp B-gg E-gg O O O 391 | B-cp I-cp I-cp I-cp E-cp B-cp I-cp I-cp I-cp E-cp O O O 392 | O O O B-cp I-cp I-cp I-cp E-cp 393 | B-pp E-pp B-xh I-xh E-xh 394 | O O O B-cp E-cp 395 | B-cp E-cp O B-cp I-cp E-cp O O O 396 | O O O B-cp E-cp 397 | O O O B-pp I-pp I-pp E-pp B-cp I-cp E-cp 398 | B-cp I-cp E-cp O O O 399 | O O O B-cp I-cp I-cp I-cp E-cp 400 | O O O O O 401 | -------------------------------------------------------------------------------- /data/EC/dev/tags.txt: -------------------------------------------------------------------------------- 1 | O O O B-pp I-pp B-yl I-yl B-cp I-cp O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O 2 | O O O B-cp I-cp 3 | O B-cp I-cp I-cp O O O O O O B-cp I-cp O O O 4 | O O O O O B-cp I-cp 5 | O O O O O O O B-cp I-cp O O O O O O O O O O O O O 6 | O O O B-cp I-cp I-cp 7 | O O O O B-cp I-cp O O 8 | O O O O 9 | O O O O O B-cp I-cp 10 | B-cp I-cp O O O O 11 | O O O O O O O O O O O O B-cp I-cp O 12 | B-cp I-cp 13 | O O O O 14 | O O O O O 15 | O O O O O O O O B-cp I-cp 16 | O O O O 17 | O O B-cp I-cp 18 | O O O O O O B-cp I-cp 19 | O O O O O O O O O 20 | O O O 21 | O B-cp I-cp O O O O O O O O O O O 22 | O O 23 | B-cp I-cp O O 24 | O O O O B-cp I-cp 25 | O O 26 | O O O O O O O O B-cp I-cp B-gg I-gg I-gg I-gg 27 | O O O O O O O B-cp I-cp I-cp 28 | O O B-cp I-cp 29 | B-cp I-cp O O O O O O 30 | B-cp I-cp I-cp I-cp 31 | B-cp I-cp O 32 | O O O O B-cp I-cp 33 | B-pp I-pp B-xh I-xh I-xh I-xh I-xh I-xh I-xh I-xh 34 | O O O O B-cp I-cp 35 | O O O 36 | B-cp I-cp I-cp O B-cp I-cp I-cp 37 | O O B-cp I-cp I-cp I-cp 38 | O O O O O O O O O O O O O O O O O O 39 | O O O B-cp I-cp I-cp 40 | B-cp I-cp I-cp I-cp 41 | O O O O O O O O O B-cp I-cp I-cp 42 | B-pp I-pp B-cp I-cp I-cp 43 | O B-cp I-cp 44 | O O O B-cp I-cp I-cp O O O O 45 | O O O O O B-cp I-cp 46 | O O O O 47 | B-cp I-cp I-cp 48 | O O O B-cp I-cp I-cp I-cp 49 | B-cp I-cp B-cp I-cp 50 | B-cp I-cp I-cp 51 | O O O O O O O O O O O O O O O O O 52 | B-cp I-cp O O 53 | O O O 54 | O O O O O B-cp 55 | O B-pp I-pp B-cp I-cp O O O O O 56 | B-pp I-pp I-pp O O B-cp I-cp I-cp 57 | B-cp I-cp O O O 58 | O O O O B-cp I-cp 59 | B-cp I-cp O O O O 60 | O O B-pp I-pp B-xh I-xh I-xh O O O 61 | O B-cp I-cp 62 | O O O O O B-pp I-pp B-xh I-xh I-xh B-cp I-cp 63 | O O O B-cp I-cp I-cp 64 | O O O O B-cp I-cp I-cp 65 | B-cp I-cp O O O O O O B-cp I-cp O B-cp I-cp 66 | O O O O B-cp 67 | B-cp I-cp I-cp 68 | O O 69 | B-yl I-yl I-yl 70 | O O O O O O O O O O 71 | O O O B-cp I-cp I-cp 72 | O O O O O O O O O O O B-cp I-cp 73 | O O O O O O B-cp I-cp 74 | O B-cp I-cp O O O O O O O O O O 75 | O O B-cp I-cp 76 | O O 77 | O O B-cp I-cp I-cp 78 | O O O B-cp 79 | O O O O O O B-cp I-cp O O O 80 | O O O 81 | O B-cp I-cp I-cp O O 82 | B-pp I-pp I-pp B-cp I-cp O O O O O O O O O O 83 | O O B-cp I-cp O O O B-cp I-cp O O O B-cp I-cp O 84 | O O B-cp I-cp O O O B-cp I-cp O O O 85 | B-cp I-cp I-cp 86 | O O O O 87 | O O O O O O O O O B-cp O O O O O 88 | O O O O O O O B-cp I-cp 89 | O O O O O O B-cp I-cp O O O O 90 | B-pp I-pp B-pp I-pp B-xh I-xh I-xh I-xh I-xh O O O B-cp 91 | O O O O O 92 | B-pp I-pp B-xh I-xh 93 | O O B-cp I-cp I-cp O O O O O O 94 | O O B-cp I-cp 95 | O O B-cp I-cp I-cp O B-gg I-gg I-gg I-gg O 96 | O O O O O 97 | O O O O O O O O O O O O B-cp I-cp 98 | O O O O B-cp I-cp 99 | O O O O O O B-cp I-cp I-cp 100 | O O O O O O B-cp I-cp 101 | O O B-cp I-cp 102 | O O B-cp I-cp I-cp 103 | O O O O O O B-cp I-cp I-cp 104 | O O O O O O O B-cp I-cp I-cp I-cp 105 | O O O O B-cp I-cp O O 106 | O O O B-cp 107 | O O O B-pp I-pp I-pp I-pp I-pp I-pp I-pp I-pp I-pp I-pp B-cp I-cp I-cp 108 | O O O B-cp I-cp 109 | O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O 110 | O O O O O O 111 | O O O O O 112 | O O O 113 | O O B-cp I-cp 114 | B-cp I-cp O 115 | O O O O O O O B-cp I-cp I-cp 116 | O O O B-cp I-cp I-cp I-cp I-cp 117 | B-cp I-cp I-cp O O O O O O 118 | O O O O O O B-cp I-cp I-cp 119 | O O 120 | B-cp I-cp I-cp 121 | B-gg I-gg I-gg I-gg B-cp I-cp I-cp I-cp 122 | O O O O O O B-cp I-cp 123 | B-yl I-yl B-cp I-cp I-cp 124 | O O O O O O O O O B-cp I-cp 125 | O O O B-cp I-cp I-cp I-cp 126 | O O O B-cp I-cp I-cp 127 | O O O O O O O 128 | O O B-cp I-cp 129 | B-cp I-cp I-cp I-cp I-cp 130 | O O O O O O O B-cp I-cp 131 | O O B-cp I-cp 132 | O O O O O B-cp I-cp I-cp O 133 | O O O O B-cp I-cp I-cp I-cp O O O B-cp I-cp I-cp I-cp O O 134 | O O B-cp I-cp I-cp 135 | B-gg I-gg I-gg I-gg I-gg I-gg I-gg B-cp I-cp I-cp I-cp 136 | O O O O O O O O O O O O O O O O O O O 137 | B-cp I-cp I-cp I-cp 138 | O O O B-cp I-cp I-cp 139 | O O O O O O 140 | O O O O O O B-cp I-cp I-cp 141 | O O O O O O O O 142 | O O O B-xh I-xh I-xh I-xh B-cp I-cp I-cp 143 | O O O O O O B-cp I-cp 144 | O O O O O O B-cp I-cp 145 | O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B-pp I-pp O O 146 | B-pp I-pp B-cp I-cp I-cp 147 | O O O O O O O O O 148 | O O O B-cp I-cp I-cp O O O O 149 | O O O B-cp I-cp B-cp I-cp I-cp I-cp I-cp O O O O O 150 | B-cp I-cp I-cp 151 | O O O B-cp I-cp O O O O O O O O O O O O O 152 | B-cp I-cp I-cp I-cp I-cp 153 | O O O O O O O O O O O O O B-cp 154 | O O O B-cp I-cp 155 | O O O O O O B-cp I-cp O 156 | B-yl I-yl I-yl I-yl 157 | O O O O B-cp I-cp 158 | B-pp I-pp 159 | O O O O 160 | O O O O B-cp I-cp 161 | O O 162 | O O B-cp I-cp I-cp 163 | O O O B-cp I-cp I-cp B-gg I-gg I-gg 164 | O B-cp I-cp 165 | O O B-cp I-cp I-cp O 166 | B-cp I-cp I-cp 167 | O O O O O O O 168 | O O O O B-cp I-cp I-cp 169 | O O O O O O O O O O 170 | O O O O B-cp I-cp 171 | O O O O B-cp I-cp 172 | B-gg I-gg I-gg I-gg O B-yl I-yl O O B-cp I-cp 173 | O O O O B-cp 174 | O O O O O O O O 175 | O O O O O O O O O O O B-cp I-cp I-cp 176 | O O 177 | O O O B-xh I-xh I-xh B-cp I-cp 178 | O O B-pp I-pp B-cp I-cp I-cp 179 | O O O O 180 | O O O O O O O O B-cp I-cp I-cp 181 | O O O O O O 182 | O O O B-cp I-cp O 183 | O O O O O O O O O 184 | O O B-cp I-cp 185 | B-pp I-pp B-cp I-cp I-cp I-cp 186 | O O O O O O O B-cp I-cp 187 | O O O O O 188 | B-pp I-pp I-pp B-cp I-cp I-cp 189 | O O B-cp I-cp I-cp 190 | B-cp I-cp 191 | O O O O O O O O 192 | O O B-cp I-cp 193 | O O O O O O O O O O O O B-cp 194 | O O O O O O O O O O 195 | B-yl I-yl I-yl B-cp I-cp I-cp 196 | O O O O O O O O B-cp I-cp 197 | O O O O O O O O 198 | O O O B-cp I-cp 199 | O O O O O O 200 | O O O O O O O O O O O O O 201 | O O O B-cp I-cp I-cp O O 202 | B-cp I-cp 203 | O O O O O O O 204 | O O O B-cp I-cp I-cp 205 | O O O B-pp I-pp I-pp I-pp I-pp I-pp I-pp 206 | B-cp I-cp I-cp I-cp B-gg I-gg O O O 207 | O O O B-cp I-cp I-cp I-cp 208 | O O O O O B-cp I-cp I-cp I-cp O B-cp I-cp I-cp O O O 209 | B-cp I-cp B-pp I-pp I-pp O O O 210 | O O O B-pp I-pp I-pp I-pp O B-cp I-cp O O O O 211 | B-pp I-pp I-pp O O O 212 | O O O B-pp I-pp I-pp B-cp I-cp I-cp 213 | O O O B-pp I-pp B-xh I-xh I-xh B-gg 214 | O O O B-cp I-cp O B-cp I-cp 215 | O O O O O 216 | O O O B-pp I-pp I-pp I-pp B-cp I-cp I-cp 217 | B-pp I-pp B-cp I-cp O O O 218 | O O O B-cp I-cp I-cp O O O O 219 | O B-cp I-cp 220 | O O O B-pp I-pp I-pp B-cp I-cp I-cp I-cp 221 | O O O B-pp I-pp B-cp I-cp I-cp I-cp I-cp 222 | B-cp I-cp 223 | O O O B-cp I-cp I-cp 224 | O O O B-cp I-cp I-cp 225 | B-pp I-pp O O O 226 | O O O B-pp I-pp O O B-cp I-cp I-cp 227 | O O O B-pp I-pp B-cp I-cp 228 | O O O B-cp I-cp I-cp B-cp I-cp I-cp 229 | O O O O B-cp I-cp 230 | O O O O O O O 231 | O O O B-cp I-cp O B-cp I-cp I-cp 232 | B-cp I-cp I-cp O O O 233 | B-cp I-cp O O O O 234 | O O O B-cp I-cp I-cp 235 | B-cp I-cp I-cp O O O 236 | O O O B-pp I-pp 237 | O O O B-pp I-pp B-cp I-cp I-cp I-cp 238 | O O O B-pp I-pp I-pp B-cp I-cp 239 | O O O O B-cp I-cp 240 | O O O B-pp I-pp I-pp B-cp I-cp I-cp 241 | B-cp I-cp I-cp O O O O O B-cp I-cp I-cp B-cp I-cp O O O 242 | O O O B-pp I-pp I-pp I-pp B-cp I-cp I-cp 243 | B-cp I-cp I-cp I-cp O O O 244 | B-cp I-cp I-cp B-gg I-gg I-gg I-gg O O O 245 | B-cp I-cp I-cp O O O 246 | B-pp I-pp I-pp O O O 247 | O O O O O B-cp I-cp I-cp 248 | O O O O O B-cp I-cp 249 | O O O B-cp I-cp 250 | B-pp I-pp I-pp B-cp I-cp O O O 251 | O O O B-pp I-pp B-cp I-cp I-cp 252 | O O O B-cp I-cp I-cp I-cp 253 | B-cp I-cp I-cp B-pp I-pp O O O 254 | O O O O O O O B-cp I-cp I-cp 255 | O B-cp I-cp 256 | B-cp I-cp I-cp I-cp O O O 257 | B-cp I-cp B-gg I-gg I-gg O O O O O O O O 258 | O O O B-cp I-cp B-cp I-cp I-cp 259 | O O O B-cp I-cp I-cp B-cp I-cp 260 | O O O B-cp I-cp I-cp I-cp 261 | B-cp I-cp I-cp O B-pp I-pp O O O 262 | O O O B-pp I-pp 263 | O O O B-pp I-pp B-cp I-cp I-cp I-cp O O O B-cp I-cp I-cp I-cp B-cp I-cp I-cp 264 | B-cp I-cp I-cp I-cp B-cp I-cp I-cp I-cp B-cp I-cp I-cp O O O 265 | O O O O O B-cp I-cp I-cp 266 | B-cp I-cp I-cp I-cp O O O 267 | B-pp I-pp I-pp I-pp B-cp I-cp O O O 268 | B-cp I-cp I-cp 269 | B-cp I-cp I-cp B-gg I-gg I-gg O O O 270 | O O O B-cp I-cp B-pp I-pp 271 | B-pp I-pp B-cp I-cp I-cp I-cp O O O 272 | B-cp I-cp O O O 273 | B-cp I-cp O O O 274 | B-cp I-cp I-cp O O O 275 | B-cp I-cp O O O B-cp I-cp O O O 276 | O O O B-cp I-cp I-cp I-cp 277 | B-pp I-pp I-pp I-pp O O O 278 | O O O B-cp I-cp 279 | O O O B-cp I-cp I-cp I-cp 280 | B-pp I-pp O O O 281 | B-cp I-cp O O O 282 | O O O B-cp I-cp I-cp O 283 | B-cp I-cp I-cp B-cp I-cp I-cp O O O 284 | B-pp I-pp B-cp I-cp O O O 285 | B-pp I-pp I-pp O O O 286 | B-cp I-cp I-cp I-cp 287 | O O O B-pp I-pp 288 | O O O B-pp I-pp I-pp I-pp 289 | O O O B-pp I-pp I-pp B-cp I-cp I-cp 290 | O O O B-cp I-cp O O O O O O O O O O B-cp I-cp I-cp I-cp 291 | O O O B-pp I-pp B-cp I-cp 292 | B-pp I-pp B-cp I-cp O O O 293 | B-cp I-cp I-cp I-cp O O O 294 | O O O B-cp I-cp B-cp I-cp 295 | B-cp I-cp I-cp I-cp I-cp O O O 296 | B-pp I-pp B-cp I-cp I-cp I-cp O O O 297 | B-yl I-yl B-cp I-cp O O O 298 | B-cp I-cp I-cp O O O 299 | B-cp I-cp I-cp I-cp O O O 300 | B-cp I-cp O O O 301 | O O O B-pp I-pp B-xh I-xh I-xh B-gg I-gg 302 | B-pp I-pp O O O 303 | B-cp I-cp O B-pp I-pp O O O 304 | B-pp I-pp I-pp O O O O O O O B-cp I-cp O O O 305 | O O O O O B-cp I-cp 306 | B-cp I-cp I-cp I-cp O O O 307 | O O O B-cp I-cp 308 | B-cp I-cp O O O 309 | B-cp I-cp I-cp B-xh I-xh O O O 310 | O O O B-pp I-pp B-xh I-xh O O 311 | B-pp I-pp I-pp B-cp I-cp I-cp O O O 312 | B-cp I-cp O O O 313 | O O O B-pp I-pp B-cp I-cp I-cp I-cp I-cp 314 | B-cp I-cp I-cp O O O O O 315 | O O O B-cp I-cp B-cp I-cp B-cp I-cp 316 | O O O B-cp I-cp 317 | B-cp I-cp I-cp I-cp O O O 318 | B-pp I-pp I-pp B-cp I-cp I-cp I-cp O O O 319 | B-cp I-cp I-cp B-cp I-cp O O O O O 320 | O O O O O B-cp I-cp B-gg I-gg I-gg I-gg I-gg 321 | B-pp I-pp B-cp I-cp I-cp I-cp I-cp O O O 322 | O O O O O 323 | O O O B-cp I-cp 324 | O O O B-xh I-xh I-xh 325 | B-cp I-cp O O O O O 326 | O O O B-cp I-cp I-cp I-cp 327 | O O O B-pp I-pp B-cp I-cp 328 | B-pp I-pp B-cp I-cp O O O 329 | O O O B-cp 330 | B-cp I-cp I-cp O O O O O 331 | B-pp I-pp I-pp B-cp I-cp I-cp I-cp I-cp O O O 332 | O O O B-cp I-cp B-cp I-cp 333 | B-cp I-cp I-cp O O O 334 | O O B-cp I-cp I-cp 335 | B-cp I-cp O B-cp I-cp O O O 336 | O O O B-cp I-cp I-cp 337 | O O O O O 338 | O O O B-cp I-cp I-cp 339 | O O O B-pp I-pp I-pp B-gg I-gg 340 | O O O O 341 | O O O B-cp I-cp O O 342 | O O O B-cp I-cp O O 343 | B-cp I-cp I-cp O B-cp I-cp I-cp O O O 344 | B-pp I-pp I-pp 345 | O O O B-pp I-pp B-cp I-cp 346 | B-cp I-cp I-cp O B-pp I-pp I-pp O O O 347 | O O O O O 348 | O O O O O B-pp I-pp B-cp I-cp 349 | B-cp I-cp I-cp I-cp O O O 350 | O O O O O O O O O 351 | B-cp I-cp I-cp 352 | B-pp I-pp B-gg O O O 353 | O O B-cp I-cp I-cp 354 | O O O B-cp I-cp I-cp 355 | O O O B-cp I-cp 356 | B-pp I-pp I-pp B-cp O O O 357 | O O O B-pp I-pp B-xh I-xh I-xh B-cp I-cp I-cp 358 | B-yl I-yl B-cp I-cp O O O 359 | O O O B-cp I-cp I-cp 360 | B-cp I-cp O O O 361 | B-cp I-cp I-cp 362 | O O O B-cp I-cp I-cp 363 | B-pp I-pp I-pp B-cp I-cp I-cp O O O 364 | O O O B-cp I-cp I-cp I-cp I-cp 365 | O O O B-cp I-cp I-cp I-cp 366 | O O O B-pp I-pp I-pp 367 | O O O B-yl I-yl B-cp I-cp I-cp 368 | B-pp I-pp I-pp B-cp I-cp I-cp O O O 369 | O O O B-pp I-pp I-pp 370 | O O O O O B-cp I-cp I-cp I-cp 371 | O O O B-cp I-cp I-cp I-cp 372 | O B-cp I-cp O O O 373 | O O O B-cp I-cp I-cp B-cp I-cp 374 | O O O B-yl I-yl I-yl B-cp I-cp 375 | B-pp I-pp I-pp B-cp I-cp I-cp B-gg I-gg I-gg O O O 376 | B-pp I-pp I-pp I-pp O O O 377 | O O O O O 378 | B-cp I-cp I-cp O O O O O O 379 | O O 380 | B-pp I-pp I-pp O B-cp I-cp I-cp I-cp I-cp O O O 381 | O O O B-cp I-cp I-cp I-cp 382 | O O O B-cp I-cp I-cp I-cp 383 | O B-cp I-cp 384 | O O O O O O O 385 | O O O B-cp I-cp O O O 386 | O O O B-cp I-cp 387 | O O O B-cp I-cp B-cp I-cp 388 | B-cp I-cp I-cp O O O 389 | O O O B-cp I-cp O 390 | B-cp I-cp I-cp I-cp B-gg I-gg O O O 391 | B-cp I-cp I-cp I-cp I-cp B-cp I-cp I-cp I-cp I-cp O O O 392 | O O O B-cp I-cp I-cp I-cp I-cp 393 | B-pp I-pp B-xh I-xh I-xh 394 | O O O B-cp I-cp 395 | B-cp I-cp O B-cp I-cp I-cp O O O 396 | O O O B-cp I-cp 397 | O O O B-pp I-pp I-pp I-pp B-cp I-cp I-cp 398 | B-cp I-cp I-cp O O O 399 | O O O B-cp I-cp I-cp I-cp I-cp 400 | O O O O O 401 | -------------------------------------------------------------------------------- /data/EC/ner-iobes.tags.vocab: -------------------------------------------------------------------------------- 1 | B-cp 2 | B-gg 3 | B-pp 4 | B-xh 5 | B-yl 6 | E-cp 7 | E-gg 8 | E-pp 9 | E-xh 10 | E-yl 11 | I-cp 12 | I-gg 13 | I-pp 14 | I-xh 15 | I-yl 16 | O 17 | S-cp 18 | S-gg 19 | S-xh 20 | S-yl 21 | -------------------------------------------------------------------------------- /data/EC/ner.embed.pth: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nooralahzadeh/DSNER-pytorch/a4d129b5ceb562a7d45f0a72dda504137e7caeee/data/EC/ner.embed.pth -------------------------------------------------------------------------------- /data/EC/ner.tags.vocab: -------------------------------------------------------------------------------- 1 | B-cp 2 | B-gg 3 | B-pp 4 | B-xh 5 | B-yl 6 | I-cp 7 | I-gg 8 | I-pp 9 | I-xh 10 | I-yl 11 | O 12 | -------------------------------------------------------------------------------- /data/EC/ner.vocab: -------------------------------------------------------------------------------- 1 |  2 | ( 3 | ) 4 | + 5 | , 6 | - 7 | . 8 | / 9 | 0 10 | 1 11 | 2 12 | 3 13 | 4 14 | 5 15 | 6 16 | 7 17 | 8 18 | 9 19 | ? 20 | A 21 | B 22 | C 23 | D 24 | E 25 | G 26 | I 27 | K 28 | L 29 | M 30 | N 31 | O 32 | P 33 | Q 34 | R 35 | S 36 | T 37 | U 38 | V 39 | Y 40 | Z 41 | a 42 | b 43 | c 44 | d 45 | e 46 | f 47 | g 48 | h 49 | i 50 | j 51 | k 52 | l 53 | m 54 | n 55 | o 56 | p 57 | q 58 | r 59 | s 60 | t 61 | u 62 | v 63 | w 64 | x 65 | y 66 | z 67 | ~ 68 | ¥ 69 | × 70 | “ 71 | ” 72 | ⊙ 73 | 。 74 | 一 75 | 丁 76 | 七 77 | 万 78 | 三 79 | 上 80 | 下 81 | 不 82 | 与 83 | 专 84 | 且 85 | 世 86 | 丘 87 | 业 88 | 东 89 | 丝 90 | 两 91 | 个 92 | 中 93 | 丰 94 | 临 95 | 丸 96 | 丹 97 | 为 98 | 主 99 | 丽 100 | 久 101 | 么 102 | 义 103 | 之 104 | 乌 105 | 乐 106 | 乒 107 | 乓 108 | 乔 109 | 九 110 | 也 111 | 习 112 | 乡 113 | 书 114 | 买 115 | 乱 116 | 乳 117 | 了 118 | 事 119 | 二 120 | 于 121 | 云 122 | 五 123 | 井 124 | 亚 125 | 些 126 | 交 127 | 亦 128 | 产 129 | 亨 130 | 享 131 | 京 132 | 亮 133 | 亲 134 | 人 135 | 亿 136 | 什 137 | 仁 138 | 今 139 | 介 140 | 从 141 | 仑 142 | 仔 143 | 仕 144 | 他 145 | 付 146 | 仙 147 | 代 148 | 以 149 | 仪 150 | 们 151 | 件 152 | 价 153 | 任 154 | 份 155 | 仿 156 | 伊 157 | 休 158 | 众 159 | 优 160 | 会 161 | 伞 162 | 伟 163 | 传 164 | 伢 165 | 伤 166 | 伦 167 | 伪 168 | 伴 169 | 伶 170 | 伸 171 | 但 172 | 位 173 | 低 174 | 佐 175 | 体 176 | 何 177 | 作 178 | 你 179 | 佳 180 | 使 181 | 來 182 | 供 183 | 依 184 | 侣 185 | 侧 186 | 便 187 | 俐 188 | 保 189 | 信 190 | 俪 191 | 修 192 | 倍 193 | 倒 194 | 候 195 | 值 196 | 假 197 | 偏 198 | 停 199 | 健 200 | 傅 201 | 储 202 | 催 203 | 像 204 | 儿 205 | 允 206 | 元 207 | 兄 208 | 充 209 | 先 210 | 光 211 | 克 212 | 免 213 | 兒 214 | 兔 215 | 兜 216 | 入 217 | 內 218 | 全 219 | 八 220 | 公 221 | 六 222 | 兰 223 | 关 224 | 兴 225 | 其 226 | 具 227 | 典 228 | 养 229 | 内 230 | 册 231 | 再 232 | 写 233 | 农 234 | 冠 235 | 冬 236 | 冰 237 | 冲 238 | 况 239 | 冷 240 | 冻 241 | 净 242 | 准 243 | 凉 244 | 凌 245 | 减 246 | 凑 247 | 凝 248 | 几 249 | 凡 250 | 凤 251 | 凯 252 | 凰 253 | 凸 254 | 出 255 | 击 256 | 刀 257 | 分 258 | 切 259 | 划 260 | 列 261 | 则 262 | 刚 263 | 创 264 | 初 265 | 刨 266 | 利 267 | 别 268 | 刮 269 | 到 270 | 制 271 | 刷 272 | 券 273 | 刺 274 | 刻 275 | 剂 276 | 剃 277 | 削 278 | 前 279 | 剧 280 | 剪 281 | 副 282 | 力 283 | 办 284 | 功 285 | 加 286 | 务 287 | 劣 288 | 动 289 | 助 290 | 努 291 | 劲 292 | 劳 293 | 勇 294 | 勤 295 | 勺 296 | 包 297 | 化 298 | 北 299 | 匙 300 | 匹 301 | 区 302 | 医 303 | 十 304 | 千 305 | 午 306 | 半 307 | 华 308 | 单 309 | 卖 310 | 南 311 | 博 312 | 卡 313 | 卤 314 | 卧 315 | 卫 316 | 印 317 | 即 318 | 却 319 | 卷 320 | 卸 321 | 厅 322 | 历 323 | 压 324 | 厕 325 | 厘 326 | 厚 327 | 原 328 | 厦 329 | 厨 330 | 去 331 | 参 332 | 又 333 | 叉 334 | 及 335 | 友 336 | 双 337 | 反 338 | 发 339 | 取 340 | 受 341 | 变 342 | 叠 343 | 口 344 | 古 345 | 句 346 | 另 347 | 只 348 | 叭 349 | 叮 350 | 可 351 | 台 352 | 史 353 | 右 354 | 叶 355 | 号 356 | 司 357 | 吃 358 | 合 359 | 吉 360 | 吊 361 | 同 362 | 后 363 | 向 364 | 吕 365 | 吗 366 | 君 367 | 吞 368 | 否 369 | 吧 370 | 听 371 | 启 372 | 吱 373 | 吴 374 | 吸 375 | 吹 376 | 吾 377 | 呀 378 | 呃 379 | 告 380 | 员 381 | 呢 382 | 呦 383 | 周 384 | 味 385 | 呵 386 | 命 387 | 咋 388 | 和 389 | 咔 390 | 咖 391 | 咨 392 | 咪 393 | 咬 394 | 咯 395 | 咱 396 | 咸 397 | 咽 398 | 品 399 | 哇 400 | 哈 401 | 响 402 | 哥 403 | 哦 404 | 哪 405 | 哺 406 | 唇 407 | 唛 408 | 售 409 | 唯 410 | 唱 411 | 商 412 | 啊 413 | 啡 414 | 啤 415 | 啥 416 | 喇 417 | 喜 418 | 喝 419 | 喵 420 | 喷 421 | 喽 422 | 嗎 423 | 嗨 424 | 嗯 425 | 嗳 426 | 嘉 427 | 嘛 428 | 嘞 429 | 嘴 430 | 器 431 | 囊 432 | 四 433 | 回 434 | 因 435 | 团 436 | 园 437 | 围 438 | 固 439 | 国 440 | 图 441 | 圆 442 | 圈 443 | 土 444 | 圣 445 | 在 446 | 地 447 | 场 448 | 圾 449 | 址 450 | 坊 451 | 坐 452 | 块 453 | 坚 454 | 坛 455 | 坠 456 | 坡 457 | 坦 458 | 垃 459 | 型 460 | 垫 461 | 城 462 | 培 463 | 基 464 | 堂 465 | 堡 466 | 堵 467 | 塑 468 | 塔 469 | 塘 470 | 塞 471 | 填 472 | 墙 473 | 增 474 | 墨 475 | 壁 476 | 士 477 | 壮 478 | 声 479 | 壳 480 | 壶 481 | 壸 482 | 壹 483 | 处 484 | 复 485 | 夏 486 | 外 487 | 多 488 | 夜 489 | 够 490 | 大 491 | 天 492 | 太 493 | 夫 494 | 失 495 | 头 496 | 夷 497 | 夹 498 | 奇 499 | 奔 500 | 套 501 | 奥 502 | 女 503 | 奶 504 | 她 505 | 好 506 | 如 507 | 妃 508 | 妆 509 | 妇 510 | 妈 511 | 妙 512 | 妮 513 | 妹 514 | 姆 515 | 始 516 | 姐 517 | 姑 518 | 姜 519 | 姬 520 | 姿 521 | 威 522 | 娃 523 | 娅 524 | 娜 525 | 婆 526 | 婚 527 | 婴 528 | 婵 529 | 婷 530 | 媳 531 | 嫁 532 | 嫂 533 | 嬰 534 | 子 535 | 孔 536 | 孕 537 | 字 538 | 存 539 | 孙 540 | 孚 541 | 季 542 | 学 543 | 孩 544 | 宁 545 | 守 546 | 安 547 | 完 548 | 宏 549 | 宗 550 | 定 551 | 宜 552 | 宝 553 | 实 554 | 宠 555 | 客 556 | 宣 557 | 室 558 | 家 559 | 容 560 | 宽 561 | 宾 562 | 宿 563 | 寄 564 | 密 565 | 寇 566 | 富 567 | 寒 568 | 寸 569 | 对 570 | 寿 571 | 封 572 | 射 573 | 尊 574 | 小 575 | 少 576 | 尔 577 | 尖 578 | 尚 579 | 尤 580 | 就 581 | 尼 582 | 尾 583 | 尿 584 | 屁 585 | 层 586 | 屈 587 | 屉 588 | 屏 589 | 屑 590 | 属 591 | 山 592 | 岁 593 | 岛 594 | 峰 595 | 崎 596 | 崔 597 | 崖 598 | 川 599 | 州 600 | 巢 601 | 工 602 | 左 603 | 巧 604 | 差 605 | 己 606 | 巴 607 | 巾 608 | 币 609 | 市 610 | 布 611 | 帅 612 | 帆 613 | 师 614 | 希 615 | 帐 616 | 帕 617 | 帘 618 | 帝 619 | 带 620 | 席 621 | 帮 622 | 常 623 | 帽 624 | 幅 625 | 幕 626 | 干 627 | 平 628 | 年 629 | 并 630 | 幻 631 | 幼 632 | 广 633 | 庆 634 | 床 635 | 应 636 | 底 637 | 店 638 | 废 639 | 度 640 | 座 641 | 庭 642 | 康 643 | 廊 644 | 延 645 | 廷 646 | 开 647 | 弄 648 | 式 649 | 引 650 | 弟 651 | 张 652 | 强 653 | 归 654 | 当 655 | 录 656 | 形 657 | 彩 658 | 影 659 | 径 660 | 待 661 | 很 662 | 徐 663 | 得 664 | 御 665 | 微 666 | 德 667 | 心 668 | 必 669 | 忘 670 | 忙 671 | 快 672 | 念 673 | 态 674 | 怎 675 | 怕 676 | 思 677 | 怡 678 | 性 679 | 总 680 | 恋 681 | 恐 682 | 恒 683 | 恤 684 | 恩 685 | 息 686 | 恶 687 | 悠 688 | 悦 689 | 您 690 | 情 691 | 惠 692 | 想 693 | 愈 694 | 意 695 | 感 696 | 愿 697 | 慕 698 | 懒 699 | 戏 700 | 成 701 | 我 702 | 或 703 | 战 704 | 截 705 | 戴 706 | 户 707 | 房 708 | 所 709 | 扁 710 | 扇 711 | 手 712 | 才 713 | 扎 714 | 扑 715 | 打 716 | 托 717 | 扣 718 | 执 719 | 扬 720 | 批 721 | 找 722 | 技 723 | 把 724 | 抑 725 | 投 726 | 抗 727 | 折 728 | 抚 729 | 护 730 | 报 731 | 披 732 | 抵 733 | 抹 734 | 抽 735 | 拇 736 | 拉 737 | 拌 738 | 拍 739 | 拐 740 | 拔 741 | 拖 742 | 招 743 | 拢 744 | 择 745 | 拼 746 | 拿 747 | 持 748 | 挂 749 | 指 750 | 按 751 | 挎 752 | 挑 753 | 挖 754 | 振 755 | 捞 756 | 换 757 | 据 758 | 捷 759 | 掉 760 | 掊 761 | 掌 762 | 排 763 | 接 764 | 控 765 | 推 766 | 描 767 | 提 768 | 插 769 | 援 770 | 搓 771 | 搞 772 | 搭 773 | 携 774 | 摆 775 | 摔 776 | 摩 777 | 撑 778 | 撕 779 | 操 780 | 擦 781 | 支 782 | 收 783 | 改 784 | 放 785 | 故 786 | 效 787 | 敏 788 | 散 789 | 敦 790 | 敬 791 | 数 792 | 整 793 | 文 794 | 斋 795 | 斑 796 | 料 797 | 斜 798 | 斤 799 | 斯 800 | 新 801 | 方 802 | 施 803 | 旅 804 | 旋 805 | 族 806 | 旗 807 | 无 808 | 既 809 | 日 810 | 早 811 | 旭 812 | 时 813 | 旺 814 | 昌 815 | 明 816 | 易 817 | 星 818 | 春 819 | 昨 820 | 是 821 | 显 822 | 晒 823 | 晚 824 | 晨 825 | 普 826 | 景 827 | 晶 828 | 智 829 | 晾 830 | 暖 831 | 曲 832 | 曼 833 | 替 834 | 最 835 | 月 836 | 有 837 | 朋 838 | 服 839 | 朗 840 | 望 841 | 朝 842 | 期 843 | 木 844 | 末 845 | 本 846 | 术 847 | 朵 848 | 机 849 | 杀 850 | 杂 851 | 杆 852 | 李 853 | 杏 854 | 村 855 | 杖 856 | 杜 857 | 束 858 | 条 859 | 来 860 | 杯 861 | 杰 862 | 杷 863 | 松 864 | 板 865 | 极 866 | 枇 867 | 枕 868 | 林 869 | 果 870 | 枣 871 | 枪 872 | 架 873 | 柄 874 | 柏 875 | 染 876 | 柔 877 | 柚 878 | 柜 879 | 柠 880 | 查 881 | 柱 882 | 柴 883 | 柿 884 | 标 885 | 栏 886 | 树 887 | 样 888 | 核 889 | 根 890 | 格 891 | 桂 892 | 桃 893 | 框 894 | 桌 895 | 桑 896 | 桶 897 | 梅 898 | 梦 899 | 梧 900 | 梨 901 | 梯 902 | 械 903 | 梳 904 | 检 905 | 棉 906 | 棋 907 | 棍 908 | 棒 909 | 棕 910 | 棚 911 | 棠 912 | 森 913 | 椅 914 | 植 915 | 椒 916 | 椰 917 | 楂 918 | 楼 919 | 概 920 | 榄 921 | 榔 922 | 榕 923 | 榛 924 | 榨 925 | 榴 926 | 槟 927 | 槽 928 | 樊 929 | 模 930 | 橄 931 | 橘 932 | 橙 933 | 橡 934 | 檀 935 | 檬 936 | 次 937 | 欢 938 | 欣 939 | 欧 940 | 欲 941 | 款 942 | 歌 943 | 止 944 | 正 945 | 步 946 | 歧 947 | 死 948 | 殖 949 | 段 950 | 母 951 | 每 952 | 毒 953 | 比 954 | 毕 955 | 毛 956 | 毫 957 | 毯 958 | 氏 959 | 气 960 | 氧 961 | 氨 962 | 水 963 | 汁 964 | 求 965 | 汇 966 | 汉 967 | 汕 968 | 汗 969 | 江 970 | 池 971 | 汤 972 | 汰 973 | 汽 974 | 沐 975 | 沙 976 | 没 977 | 沫 978 | 河 979 | 油 980 | 治 981 | 沾 982 | 泉 983 | 泊 984 | 法 985 | 泛 986 | 泡 987 | 波 988 | 泥 989 | 注 990 | 泰 991 | 泳 992 | 泵 993 | 泸 994 | 洁 995 | 洋 996 | 洒 997 | 洗 998 | 洞 999 | 津 1000 | 洱 1001 | 洲 1002 | 活 1003 | 洽 1004 | 派 1005 | 流 1006 | 浅 1007 | 浆 1008 | 浇 1009 | 测 1010 | 浓 1011 | 浦 1012 | 浪 1013 | 浴 1014 | 海 1015 | 浸 1016 | 涂 1017 | 消 1018 | 涤 1019 | 润 1020 | 涨 1021 | 涯 1022 | 液 1023 | 淀 1024 | 淇 1025 | 淋 1026 | 淘 1027 | 淡 1028 | 深 1029 | 混 1030 | 清 1031 | 渍 1032 | 渔 1033 | 温 1034 | 港 1035 | 游 1036 | 湖 1037 | 湘 1038 | 湾 1039 | 湿 1040 | 溃 1041 | 源 1042 | 溜 1043 | 溢 1044 | 溥 1045 | 溶 1046 | 滋 1047 | 滑 1048 | 滕 1049 | 滚 1050 | 满 1051 | 滤 1052 | 滨 1053 | 滴 1054 | 漂 1055 | 漫 1056 | 漱 1057 | 漾 1058 | 潘 1059 | 潮 1060 | 澎 1061 | 澡 1062 | 澳 1063 | 激 1064 | 灣 1065 | 火 1066 | 灭 1067 | 灯 1068 | 灰 1069 | 灵 1070 | 灶 1071 | 炉 1072 | 炒 1073 | 炖 1074 | 炫 1075 | 炭 1076 | 炮 1077 | 炸 1078 | 点 1079 | 炼 1080 | 烘 1081 | 烛 1082 | 烟 1083 | 烤 1084 | 烦 1085 | 烧 1086 | 热 1087 | 焗 1088 | 焙 1089 | 焦 1090 | 然 1091 | 煎 1092 | 煤 1093 | 照 1094 | 煮 1095 | 煲 1096 | 熊 1097 | 熏 1098 | 熟 1099 | 燃 1100 | 燕 1101 | 燥 1102 | 爆 1103 | 爪 1104 | 爬 1105 | 爱 1106 | 爵 1107 | 爷 1108 | 爸 1109 | 爹 1110 | 爽 1111 | 片 1112 | 版 1113 | 牌 1114 | 牙 1115 | 牛 1116 | 牡 1117 | 牧 1118 | 物 1119 | 特 1120 | 狗 1121 | 独 1122 | 狮 1123 | 猕 1124 | 猜 1125 | 猪 1126 | 猫 1127 | 猴 1128 | 率 1129 | 玉 1130 | 王 1131 | 玛 1132 | 玩 1133 | 玫 1134 | 环 1135 | 现 1136 | 玻 1137 | 珀 1138 | 珍 1139 | 珠 1140 | 班 1141 | 球 1142 | 理 1143 | 琪 1144 | 琳 1145 | 瑞 1146 | 瑟 1147 | 瑰 1148 | 璃 1149 | 璐 1150 | 瓜 1151 | 瓶 1152 | 瓷 1153 | 甄 1154 | 甘 1155 | 甜 1156 | 生 1157 | 用 1158 | 田 1159 | 甲 1160 | 申 1161 | 电 1162 | 男 1163 | 画 1164 | 甾 1165 | 畅 1166 | 界 1167 | 留 1168 | 番 1169 | 畸 1170 | 疆 1171 | 疏 1172 | 疤 1173 | 疫 1174 | 痒 1175 | 痘 1176 | 痱 1177 | 瘦 1178 | 登 1179 | 白 1180 | 百 1181 | 皂 1182 | 的 1183 | 皇 1184 | 皮 1185 | 皱 1186 | 盅 1187 | 盆 1188 | 益 1189 | 盐 1190 | 盒 1191 | 盖 1192 | 盗 1193 | 盘 1194 | 直 1195 | 相 1196 | 盼 1197 | 盾 1198 | 省 1199 | 眉 1200 | 看 1201 | 真 1202 | 眠 1203 | 眼 1204 | 着 1205 | 睛 1206 | 睡 1207 | 睫 1208 | 瞳 1209 | 知 1210 | 短 1211 | 矮 1212 | 石 1213 | 矿 1214 | 码 1215 | 砂 1216 | 研 1217 | 砖 1218 | 破 1219 | 础 1220 | 硅 1221 | 硫 1222 | 硬 1223 | 碁 1224 | 碎 1225 | 碗 1226 | 碘 1227 | 碧 1228 | 碱 1229 | 碳 1230 | 磁 1231 | 磨 1232 | 磺 1233 | 示 1234 | 礼 1235 | 社 1236 | 祛 1237 | 神 1238 | 票 1239 | 福 1240 | 离 1241 | 禾 1242 | 秀 1243 | 私 1244 | 秋 1245 | 种 1246 | 科 1247 | 秤 1248 | 积 1249 | 称 1250 | 移 1251 | 程 1252 | 稻 1253 | 空 1254 | 穿 1255 | 窖 1256 | 窗 1257 | 窝 1258 | 立 1259 | 竖 1260 | 站 1261 | 章 1262 | 童 1263 | 竹 1264 | 竿 1265 | 笋 1266 | 笑 1267 | 笔 1268 | 笨 1269 | 笼 1270 | 等 1271 | 筋 1272 | 筒 1273 | 答 1274 | 筷 1275 | 签 1276 | 简 1277 | 算 1278 | 管 1279 | 箭 1280 | 箱 1281 | 篮 1282 | 篷 1283 | 籍 1284 | 米 1285 | 类 1286 | 籼 1287 | 籽 1288 | 粉 1289 | 粒 1290 | 粗 1291 | 粘 1292 | 粥 1293 | 粮 1294 | 粽 1295 | 精 1296 | 糊 1297 | 糍 1298 | 糕 1299 | 糖 1300 | 糙 1301 | 糠 1302 | 糯 1303 | 系 1304 | 紅 1305 | 素 1306 | 紧 1307 | 紫 1308 | 红 1309 | 纤 1310 | 约 1311 | 级 1312 | 纪 1313 | 纯 1314 | 纱 1315 | 纳 1316 | 纸 1317 | 纹 1318 | 纽 1319 | 线 1320 | 练 1321 | 组 1322 | 细 1323 | 织 1324 | 绍 1325 | 经 1326 | 绒 1327 | 结 1328 | 给 1329 | 络 1330 | 统 1331 | 绣 1332 | 续 1333 | 维 1334 | 绵 1335 | 综 1336 | 绿 1337 | 缩 1338 | 缸 1339 | 罐 1340 | 网 1341 | 罗 1342 | 罩 1343 | 置 1344 | 羊 1345 | 美 1346 | 羚 1347 | 翁 1348 | 翅 1349 | 翠 1350 | 翡 1351 | 翻 1352 | 翼 1353 | 耀 1354 | 老 1355 | 考 1356 | 而 1357 | 耐 1358 | 耕 1359 | 耳 1360 | 耶 1361 | 聊 1362 | 职 1363 | 联 1364 | 聚 1365 | 肉 1366 | 肌 1367 | 肖 1368 | 肚 1369 | 肝 1370 | 肠 1371 | 股 1372 | 肤 1373 | 肥 1374 | 肩 1375 | 胃 1376 | 胆 1377 | 背 1378 | 胎 1379 | 胖 1380 | 胡 1381 | 胰 1382 | 胶 1383 | 胸 1384 | 胺 1385 | 能 1386 | 脂 1387 | 脆 1388 | 脉 1389 | 脐 1390 | 脑 1391 | 脖 1392 | 脚 1393 | 脯 1394 | 脱 1395 | 脸 1396 | 腊 1397 | 腋 1398 | 腐 1399 | 腩 1400 | 腰 1401 | 腹 1402 | 腻 1403 | 腿 1404 | 膏 1405 | 膜 1406 | 膝 1407 | 膳 1408 | 臀 1409 | 臂 1410 | 臣 1411 | 自 1412 | 臭 1413 | 至 1414 | 致 1415 | 臻 1416 | 舌 1417 | 舍 1418 | 舒 1419 | 舞 1420 | 舰 1421 | 船 1422 | 良 1423 | 色 1424 | 艺 1425 | 艾 1426 | 节 1427 | 芋 1428 | 芒 1429 | 芙 1430 | 芝 1431 | 芥 1432 | 芦 1433 | 芪 1434 | 芬 1435 | 芭 1436 | 芯 1437 | 花 1438 | 芳 1439 | 苍 1440 | 苏 1441 | 苓 1442 | 苔 1443 | 苗 1444 | 苦 1445 | 英 1446 | 苹 1447 | 茂 1448 | 茄 1449 | 茅 1450 | 茉 1451 | 茱 1452 | 茵 1453 | 茶 1454 | 草 1455 | 荐 1456 | 荒 1457 | 荞 1458 | 荟 1459 | 荣 1460 | 荧 1461 | 药 1462 | 荷 1463 | 莉 1464 | 莎 1465 | 莓 1466 | 莪 1467 | 莫 1468 | 莱 1469 | 莲 1470 | 菇 1471 | 菊 1472 | 菌 1473 | 菜 1474 | 菠 1475 | 菱 1476 | 菲 1477 | 萄 1478 | 萌 1479 | 萝 1480 | 营 1481 | 萨 1482 | 落 1483 | 葚 1484 | 葡 1485 | 董 1486 | 葫 1487 | 葱 1488 | 葵 1489 | 蒂 1490 | 蒙 1491 | 蒜 1492 | 蒟 1493 | 蒲 1494 | 蒸 1495 | 蒻 1496 | 蓉 1497 | 蓝 1498 | 蔓 1499 | 蔗 1500 | 蔬 1501 | 蔻 1502 | 蕉 1503 | 蕴 1504 | 蕾 1505 | 薄 1506 | 薇 1507 | 薏 1508 | 薯 1509 | 薰 1510 | 藏 1511 | 藤 1512 | 藻 1513 | 蘸 1514 | 虑 1515 | 虫 1516 | 虹 1517 | 虾 1518 | 蚊 1519 | 蚕 1520 | 蛀 1521 | 蛇 1522 | 蛋 1523 | 蛎 1524 | 蛙 1525 | 蛛 1526 | 蜀 1527 | 蜂 1528 | 蜘 1529 | 蜜 1530 | 蜡 1531 | 蝇 1532 | 蝙 1533 | 蝠 1534 | 蝴 1535 | 蝶 1536 | 螂 1537 | 融 1538 | 螨 1539 | 螺 1540 | 蟑 1541 | 血 1542 | 行 1543 | 街 1544 | 衡 1545 | 衣 1546 | 补 1547 | 表 1548 | 衫 1549 | 衬 1550 | 袄 1551 | 袋 1552 | 袖 1553 | 袜 1554 | 被 1555 | 装 1556 | 裙 1557 | 裤 1558 | 裱 1559 | 裹 1560 | 褂 1561 | 褥 1562 | 襄 1563 | 襯 1564 | 西 1565 | 要 1566 | 观 1567 | 规 1568 | 视 1569 | 觉 1570 | 角 1571 | 解 1572 | 触 1573 | 计 1574 | 订 1575 | 让 1576 | 训 1577 | 记 1578 | 许 1579 | 设 1580 | 证 1581 | 评 1582 | 诉 1583 | 试 1584 | 诗 1585 | 话 1586 | 询 1587 | 该 1588 | 详 1589 | 语 1590 | 误 1591 | 说 1592 | 请 1593 | 诺 1594 | 调 1595 | 谢 1596 | 谱 1597 | 谷 1598 | 豆 1599 | 豉 1600 | 豌 1601 | 象 1602 | 豪 1603 | 買 1604 | 賣 1605 | 購 1606 | 贝 1607 | 负 1608 | 账 1609 | 货 1610 | 质 1611 | 购 1612 | 贴 1613 | 贵 1614 | 贸 1615 | 费 1616 | 资 1617 | 赋 1618 | 赞 1619 | 走 1620 | 起 1621 | 超 1622 | 越 1623 | 趣 1624 | 足 1625 | 跑 1626 | 跟 1627 | 路 1628 | 踩 1629 | 身 1630 | 躺 1631 | 车 1632 | 转 1633 | 轮 1634 | 软 1635 | 轻 1636 | 载 1637 | 轿 1638 | 较 1639 | 辅 1640 | 辆 1641 | 辉 1642 | 辐 1643 | 输 1644 | 辛 1645 | 辣 1646 | 边 1647 | 达 1648 | 过 1649 | 迈 1650 | 运 1651 | 近 1652 | 还 1653 | 这 1654 | 进 1655 | 远 1656 | 连 1657 | 迪 1658 | 迷 1659 | 追 1660 | 退 1661 | 送 1662 | 适 1663 | 选 1664 | 透 1665 | 递 1666 | 逗 1667 | 通 1668 | 速 1669 | 造 1670 | 連 1671 | 逸 1672 | 道 1673 | 遥 1674 | 遮 1675 | 避 1676 | 那 1677 | 邦 1678 | 邮 1679 | 郁 1680 | 郎 1681 | 郑 1682 | 部 1683 | 都 1684 | 配 1685 | 酒 1686 | 酥 1687 | 酪 1688 | 酰 1689 | 酱 1690 | 酵 1691 | 酷 1692 | 酸 1693 | 酿 1694 | 醇 1695 | 醋 1696 | 醛 1697 | 里 1698 | 重 1699 | 野 1700 | 量 1701 | 金 1702 | 针 1703 | 钉 1704 | 钓 1705 | 钙 1706 | 钢 1707 | 钥 1708 | 钩 1709 | 钱 1710 | 钳 1711 | 钻 1712 | 铁 1713 | 铂 1714 | 铃 1715 | 铅 1716 | 铲 1717 | 银 1718 | 铺 1719 | 链 1720 | 销 1721 | 锁 1722 | 锂 1723 | 锅 1724 | 锈 1725 | 锋 1726 | 锌 1727 | 锐 1728 | 错 1729 | 锡 1730 | 锣 1731 | 锤 1732 | 锦 1733 | 键 1734 | 锹 1735 | 镇 1736 | 镜 1737 | 长 1738 | 门 1739 | 闭 1740 | 问 1741 | 闯 1742 | 闲 1743 | 间 1744 | 闷 1745 | 闺 1746 | 阔 1747 | 防 1748 | 阳 1749 | 阴 1750 | 阿 1751 | 陀 1752 | 陈 1753 | 降 1754 | 限 1755 | 院 1756 | 除 1757 | 险 1758 | 陶 1759 | 隆 1760 | 随 1761 | 隐 1762 | 隔 1763 | 障 1764 | 雀 1765 | 雄 1766 | 雅 1767 | 雕 1768 | 雨 1769 | 雪 1770 | 零 1771 | 雷 1772 | 雾 1773 | 需 1774 | 霄 1775 | 震 1776 | 霜 1777 | 露 1778 | 霸 1779 | 青 1780 | 静 1781 | 非 1782 | 靠 1783 | 面 1784 | 鞋 1785 | 韧 1786 | 韩 1787 | 音 1788 | 页 1789 | 顶 1790 | 项 1791 | 顺 1792 | 须 1793 | 顾 1794 | 顿 1795 | 颂 1796 | 预 1797 | 领 1798 | 频 1799 | 颗 1800 | 题 1801 | 颜 1802 | 额 1803 | 风 1804 | 飘 1805 | 飞 1806 | 食 1807 | 餐 1808 | 饨 1809 | 饭 1810 | 饮 1811 | 饯 1812 | 饰 1813 | 饲 1814 | 饵 1815 | 饺 1816 | 饼 1817 | 馄 1818 | 馅 1819 | 馍 1820 | 馒 1821 | 首 1822 | 香 1823 | 馨 1824 | 马 1825 | 驰 1826 | 驱 1827 | 驴 1828 | 驶 1829 | 驾 1830 | 骁 1831 | 骂 1832 | 骏 1833 | 骑 1834 | 骗 1835 | 骨 1836 | 高 1837 | 鬼 1838 | 魅 1839 | 魔 1840 | 鱼 1841 | 鱿 1842 | 鲁 1843 | 鲜 1844 | 鲨 1845 | 鳄 1846 | 鳕 1847 | 鸟 1848 | 鸡 1849 | 鸭 1850 | 鸯 1851 | 鸳 1852 | 鸽 1853 | 鸿 1854 | 鹌 1855 | 鹑 1856 | 鹰 1857 | 麒 1858 | 麟 1859 | 麦 1860 | 麻 1861 | 麼 1862 | 黄 1863 | 黎 1864 | 黏 1865 | 黑 1866 | 鼠 1867 | 鼻 1868 | 齿 1869 | 龙 1870 | 龟 1871 | ! 1872 | , 1873 | ? 1874 | -------------------------------------------------------------------------------- /data/EC/test/a.txt: -------------------------------------------------------------------------------- 1 | 梅 干 2 | 我 要 买 婴 儿 潮 款 衣 服 3 | 宝 宝 可 以 开 的 挖 机 4 | 有 没 有 2 5 0 L 的 5 | 有 没 有 蒸 面 包 呀 6 | 五 菱 宏 光 S 七 座 7 | 信 号 强 8 | 健 身 服 夏 装 女 9 | 你 们 这 个 有 人 工 服 务 , 没 有 10 | 想 买 婴 儿 学 饮 杯 11 |  u 盘 12 | 胖 M M 上 衣 13 | 为 什 么 我 想 买 票 14 | 电 动 增 压 泵 15 | 挎 短 裤 16 | 我 要 买 女 童 套 装 17 | 周 大 福 18 | 地 面 积 模 19 | 带 帽 子 20 | 脱 水 洗 衣 机 21 | 我 要 买 夏 季 韩 版 上 衣 女 装 22 | 补 水 , 美 白 , 祛 斑 23 | 我 想 买 笔 可 以 不 用 红 包 吗 优 惠 券 刚 好 2 1 9 24 | 辣 鸡 辣 鸡 25 | 锹 26 | 爬 行 毯 27 | 情 侣 衬 衫 28 | 手 表 式 听 歌 用 的 29 | 男 式 大 破 洞 裤 30 | 买 什 么 多 肉 植 物 最 好 ? 31 | 我 想 要 一 个 一 米 八 的 大 熊 , 要 可 爱 一 点 的 漂 亮 一 点 的 32 | 双 头 卧 蚕 笔 33 | 家 用 餐 桌 34 | 休 闲 厅 35 | 软 底 内 增 好 的 白 鞋 36 | o p p o r 9 个 性 手 机 壳 37 | 女 学 生 板 鞋 38 | 我 想 买 辆 自 行 车 39 | 我 要 买 女 春 秋 季 学 生 连 体 睡 衣 40 | 我 要 买 春 季 的 女 士 , 续 了 平 底 儿 鞋 41 | 亲 , 我 刚 买 的 花 把 地 址 和 我 写 反 了 42 | 碧 罗 春 43 | 运 动 鞋 子 1 7 岁 女 44 | 购 物 卷 可 不 可 以 叠 加 使 用 45 | 坚 果 混 合 46 | 我 说 的 意 思 是 , 我 买 个 的 东 西 都 是 还 是 显 示 在 手 机 上 面 。 47 | 长 袖 厚 体 恤 48 | 给 闺 密 买 生 日 礼 物 49 | 帮 我 推 荐 婴 儿 毛 线 帽 子 50 | 办 公 设 计 的 书 籍 51 | 魅 蓝 m 2 手 机 壳 52 | 好 用 的 国 货 护 肤 品 53 | 道 士 小 一 点 的 54 | 小 帆 布 包 斜 挎 55 | 我 要 买 儿 童 车 。 可 推 可 踩 的 三 轮 车 56 | 爬 山 工 具 57 | 黄 金 吊 坠 58 | 购 物 卷 不 能 满 减 59 | 我 想 看 看 我 的 评 价 是 什 么 , 还 有 接 头 吗 , 还 有 那 个 图 吗 ? 60 | 有 没 有 卖 千 里 追 风 油 的 61 | 太 小 气 了 62 | 我 想 买 诺 和 笔 5 的 针 头 63 | 粥 , 可 以 自 己 煮 的 64 | 我 要 华 为 荣 耀 v 9 65 | 最 好 是 发 饰 之 类 的 66 | 买 杯 子 67 | 买 苹 果 s e 手 机 68 | 软 皮 包 包 69 | 泡 酒 70 | 买 芒 果 71 | 我 要 性 价 比 高 的 耳 机 72 | 老 婆 1 5 0 斤 , 请 问 买 什 么 形 号 的 内 裤 ? 73 | 买 牛 肉 丝 74 | 我 要 买 收 腰 长 袖 衫 学 生 女 75 | 护 肤 水 单 件 76 | 超 轻 77 | 助 性 工 具 78 | 美 白 保 湿 美 白 去 斑 去 黄 用 , 却 是 79 | 金 骏 眉 与 正 山 小 种 有 什 么 区 别 ? 80 | 请 问 1 岁 小 孩 买 什 么 玩 具 81 | 5 0 左 右 82 | 有 没 有 又 便 宜 又 是 一 身 的 工 作 服 83 | 2 4 岁 身 高 1 7 6 体 重 1 7 0 想 买 衣 服 84 | 炫 迈 85 | 我 想 找 儿 童 自 行 车 86 | 我 要 买 电 动 遥 控 四 轮 车 钥 匙 启 动 87 | 真 皮 浅 口 单 鞋 女 88 | 3 6 0 N 5 手 机 1 3 9 9 元 可 以 买 到 吗 ? 89 | 修 身 显 瘦 90 | 宝 格 丽 91 | 这 个 太 便 宜 了 , 黏 胶 货 92 | 我 要 买 护 手 霜 93 | 女 上 衣 下 衣 都 可 以 94 | 2 8 4 2 6 5 2 95 | 玩 具 毕 业 炮 96 | 想 买 耳 机 子 97 | 我 要 买 拉 拉 裤 98 | 想 买 套 护 肤 品 99 | 我 要 买 炖 盅 100 | 婴 儿 三 轮 推 车 101 | 修 身 马 甲 102 | 淡 香 103 | 你 给 我 推 荐 这 样 的 茶 叶 , 你 这 么 有 本 事 咋 不 上 天 呢 104 | 有 没 有 好 的 宝 贝 可 以 推 荐 105 | 算 了 , 辛 苦 小 蜜 了 106 | 春 款 衣 服 女 107 | 上 火 , 买 什 么 药 效 果 好 108 | 我 想 买 东 西 , 提 示 买 家 账 号 错 误 109 | 鲁 花 菜 籽 油 110 | 短 裤 男 111 | 适 合 山 东 春 天 穿 的 孕 妇 套 装 112 | 橡 皮 糖 113 | 马 尾 假 发 中 长 114 | 高 效 化 妆 水 115 | 买 东 西 商 家 让 我 推 荐 , 有 证 据 , 如 何 投 诉 116 | 乐 视 手 机 质 量 好 不 好 ? 117 | 我 要 买 白 色 卫 衣 118 | 纹 身 膏 119 | 一 品 望 家 120 | 春 季 新 款 女 装 上 衣 , 连 衣 裙 121 | 您 好 , 我 想 买 右 佐 匹 克 隆 片 , 有 卖 的 吗 ? 122 | 小 蜜 , 问 你 个 事 123 | 我 想 下 载 大 码 美 衣 124 | 嫁 接 睫 毛 9 D 125 | 男 士 九 分 裤 126 | 大 码 吊 带 长 裙 127 | 我 要 吃 坚 果 128 | 我 想 买 护 腰 带 129 | 我 要 找 欧 美 风 格 女 装 130 | 有 没 有 便 宜 的 手 机 ? 131 | 求 推 荐 1 T 硬 盘 132 | 想 买 性 用 品 133 | 我 要 找 情 趣 内 衣 , 性 感 一 点 的 呦 134 | 我 要 买 蓝 牙 游 戏 手 柄 135 | 3 1 女 人 的 衣 服 136 | 嫂 子 是 微 博 , 康 , 是 七 十 八 不 多 的 时 候 嘞 137 | 润 肤 的 138 | 不 好 意 思 是 个 小 女 生 儿 , 我 想 要 一 个 可 爱 漂 亮 的 耳 环 , 而 且 是 而 且 是 小 女 生 , 学 生 戴 的 耳 环 。 139 | 5 0 0 0 0 充 电 宝 140 | 汽 车 发 动 机 141 | 我 要 买 性 能 高 的 游 戏 本 142 | 华 为 手 机 和 荣 耀 的 区 别 143 | 推 荐 女 鞋 店 铺 . 有 4 0 码 女 鞋 就 行 144 | 想 买 只 保 温 壸 盖 子 145 | 可 以 其 他 类 型 的 吗 146 | 有 没 有 能 放 下 驾 驶 证 的 短 款 钱 包 147 | 搭 配 绿 色 连 衣 裙 裤 的 鞋 子 148 | 我 想 买 女 包 斜 挎 包 小 包 149 | 草 莓 发 卡 150 | 購 物 卷 怎 麼 使 用 151 | 我 有 黑 头 , 毛 孔 粗 大 , 还 有 痘 印 , 你 帮 我 推 荐 几 款 152 | 小 孩 子 三 轮 子 153 | 我 想 买 纸 尿 裤 可 么 都 没 大 小 码 可 挑 呢 154 | 买 那 个 门 铃 帮 我 开 发 票 155 | 我 要 买 东 西 , 客 服 没 有 回 应 156 | 唱 戏 机 157 | 野 钓 饲 料 158 | 粉 铺 159 | 我 想 买 个 商 品 在 哪 里 拍 下 来 160 | 粘 土 模 具 应 该 买 什 么 好 ? 161 | 买 衣 服 没 有 钱 可 不 可 以 抵 账 162 | 半 球 163 | 美 白 , 去 斑 。 164 | 灯 灯 灯 165 | 移 动 牌 166 | 计 步 器 167 | 我 要 买 罗 技 游 戏 鼠 标 168 | 哺 乳 期 吃 的 零 食 169 | 真 皮 鞋 170 | 我 要 定 型 保 湿 不 油 腻 的 头 发 喷 雾 171 | 女 士 休 闲 鞋 172 | 想 买 薄 的 手 机 173 | 翡 翠 玫 瑰 花 174 | 小 孩 体 质 差 , 我 想 买 个 免 疫 球 蛋 白 给 他 吃 , 什 么 牌 子 的 效 果 好 些 175 | 东 西 太 贵 了 176 | 青 少 年 177 | 不 要 韩 货 178 | 吸 黑 头 179 | 化 妆 刷 180 | 我 要 买 唇 液 181 | 美 图 m 6 s 182 | 控 油 的 呢 183 | 我 想 买 短 的 牛 仔 裤 184 | 白 色 连 衣 长 裙 185 | 破 洞 牛 仔 牛 仔 裤 186 | 我 要 买 多 浆 植 物 187 | 汽 车 硅 胶 管 188 | 十 字 绣 真 实 回 收 的 189 | 我 要 买 青 少 年 喝 的 羊 奶 请 推 荐 190 | 成 语 故 事 书 191 | 都 太 贵 了 能 便 宜 一 点 的 192 | 男 士 香 体 193 | 我 要 买 祛 痘 印 194 | 背 带 裤 1 5 - 1 6 195 | 您 好 , 我 拍 错 了 , 想 要 菲 克 斯 曼 家 用 工 具 箱 1 7 寸 z 0 1 0 3 196 | 或 妆 品 197 | 小 个 的 糖 盒 198 | 我 要 买 口 红 , 豆 沙 色 , 雾 面 , 大 牌 子 199 | 淘 宝 到 底 有 没 有 人 工 客 服 ? 200 | B B 霜 和 隔 离 霜 组 合 201 | 可 可 粉 模 具 202 | 笔 记 本 4 G 内 存 203 | 我 的 奶 奶 生 日 要 到 了 , 可 以 给 我 推 荐 什 么 合 适 的 生 日 礼 物 吗 204 | 我 要 买 普 洱 生 茶 205 | 有 没 有 什 么 辣 条 好 吃 的 206 | 购 推 荐 个 女 款 半 截 袖 的 连 接 , 我 看 看 207 | 电 脑 配 件 208 | 男 生 七 分 裤 209 | 吹 风 机 静 音 210 | 1 3 9 还 一 个 裙 子 , 你 有 没 搞 错 , 那 么 贵 211 | 带 魔 音 手 机 212 | 有 没 有 去 廊 坊 的 火 车 213 | 有 女 票 吗 214 | 有 卖 安 眠 药 吗 215 | 2 0 1 7 夏 季 女 装 216 | 找 o - 2 0 块 钱 的 套 装 217 | 休 闲 运 动 鞋 百 搭 的 218 | 我 要 买 内 蒙 古 生 产 的 神 奇 牌 小 活 络 丸 219 | 金 币 领 到 一 百 就 领 不 了 220 | 乳 221 | 我 要 买 烘 干 架 222 | 我 想 找 洋 葱 圈 223 | 长 城 224 | 我 想 要 结 婚 婚 纱 又 便 宜 又 好 看 225 | 碳 烤 226 | 便 宜 的 乳 液 227 | 想 买 汽 车 座 套 228 | 夹 克 衫 修 身 229 | 我 想 买 工 作 服 装 带 执 勤 臂 章 的 短 袖 衬 衫 230 | 福 利 社 小 蜜 231 | 送 你 什 么 花 232 | 夏 季 鞋 子 233 | 白 色 外 套 配 什 么 颜 色 234 | 想 买 中 老 年 男 春 秋 薄 款 实 棉 睡 衣 裤 子 一 百 四 十 斤 左 右 235 | 女 孩 儿 的 , 单 肩 背 包 236 | 选 移 动 电 源 ? 其 实 可 以 很 简 单 ! 数 码 达 人 o r 电 器 小 白 都 不 怕 ! 快 试 试 发 送 “ 我 要 买 移 动 电 源 ” 或 其 他 需 求 , 让 小 蜜 帮 你 挑 吧 ~ 发 送 试 试 237 | 我 要 找 药 膏 238 | 踩 脚 袜 薄 绒 239 | 我 要 买 s p 6 8 240 | 小 米 n a o t e 2 241 | 月 经 242 | 五 香 红 烧 牛 肉 243 | 睡 吧 244 | 有 木 有 睫 毛 增 长 液 245 | 我 要 秋 天 的 246 | 我 想 买 裙 子 247 | Z p p o 火 机 248 | 6 0 0 左 右 的 显 卡 249 | 手 提 包 斜 挎 包 250 | 想 买 一 个 这 种 床 , 网 上 下 不 了 单 251 | 便 宜 好 吃 的 水 果 252 | 买 手 机 膜 的 253 | 3 . 2 1 254 | 正 品 凤 凰 自 行 车 255 | 送 什 么 生 日 礼 物 比 较 好 呢 256 | 贵 货 叶 插 苗 257 | 我 要 买 中 长 款 棉 袄 258 | 韩 版 的 259 | 要 哺 乳 衣 260 | 保 暖 针 织 衫 内 搭 261 | 去 斑 262 | 简 单 , 好 看 的 贴 纸 263 | 我 想 买 个 飞 行 器 264 | 洋 气 点 的 牛 仔 裤 265 | 有 没 有 棉 麻 的 外 套 266 | 增 粗 增 长 267 | 手 机 偏 振 镜 头 268 | 一 周 岁 女 宝 269 | 柔 顺 剂 270 | 我 想 买 个 卧 蚕 笔 271 | 我 想 看 一 下 十 月 二 月 份 镜 买 什 么 了 272 | 哺 乳 运 动 装 273 | 买 联 想 手 机 274 | 夏 季 的 半 袖 之 类 的 275 | 母 女 装 夏 款 276 | 御 泥 坊 的 277 | 情 侣 纯 色 手 机 壳 278 | 这 款 裙 的 布 料 有 没 有 乔 其 纱 ? 279 | 阔 腿 短 裤 280 | 要 买 一 个 魔 幻 陀 螺 281 | 不 是 大 妈 282 | 风 扇 灯 283 | 聚 拢 型 内 衣 284 | 8 g 的 285 | 2 0 1 7 新 款 打 底 衫 可 外 穿 286 | 脚 垫 287 | 买 游 戏 本 288 | 坡 跟 鞋 女 289 | 想 要 一 个 能 装 鞋 的 旅 行 包 290 | 我 想 要 脱 毛 膏 291 | 陈 皮 糖 292 | 熊 娃 娃 293 | 买 补 水 套 装 294 | 男 士 个 性 口 罩 295 | 凉 鞋 露 面 的 296 | 想 买 小 车 297 | 二 年 级 买 什 么 故 事 比 较 好 298 | 你 感 觉 什 么 手 机 好 用 299 | 新 款 休 闲 装 300 | 春 装 外 301 | 我 要 的 是 力 帆 欧 式 战 马 A 6 的 立 柱 包 角 302 | 培 训 班 自 粘 壁 纸 303 | 溥 长 袖 304 | 好 吃 又 便 宜 的 零 食 305 | 秋 季 整 套 运 动 装 306 | 清 朝 女 士 秋 衣 307 | 淡 水 养 殖 小 鱼 308 | 白 熊 啤 酒 六 瓶 309 | 毛 呢 外 衣 310 | 男 士 外 套 韩 版 修 身 311 | 床 垫 薄 的 312 | 九 鱼 图 313 | 想 买 男 款 能 量 吊 坠 314 | g 315 | 男 生 内 裤 316 | 手 链 纯 银 配 件 317 | 买 三 文 鱼 送 芥 末 嘛 ? 318 | h o l l e K e i t h 贴 纸 319 | 外 套 男 320 | 女 孩 到 7 岁 的 肖 321 | 我 要 买 宿 舍 电 脑 桌 322 | 要 儿 童 的 323 | 裙 撑 324 | 针 织 马 甲 325 | 打 游 戏 326 | 胖 M M 裤 子 327 | 不 增 高 便 宜 点 的 328 | 我 要 买 宝 宝 补 钙 的 329 | 辣 妈 姜 糖 膏 330 | 是 门 不 是 锁 331 | 我 今 天 在 淘 宝 里 想 买 一 件 内 衣 , 还 没 有 下 单 前 咨 询 了 那 家 店 的 客 服 , 她 说 我 差 评 太 多 , 不 卖 给 我 , 还 出 口 伤 人 的 骂 我 , 我 想 投 诉 她 态 度 恶 劣 332 | 我 要 买 懒 蛋 蛋 333 | 我 要 刚 才 给 你 发 的 电 灯 充 电 器 334 | 我 想 买 个 排 毒 养 颜 的 , 因 为 现 在 给 宝 宝 吃 奶 不 知 道 可 以 用 哪 款 335 | 百 搭 衣 服 女 336 | 有 没 有 什 么 香 水 适 合 三 周 大 的 宠 物 兔 用 337 | 问 你 事 儿 粉 色 不 是 红 色 了 338 | 我 想 要 春 天 的 外 套 339 | 是 买 的 花 颜 色 不 对 340 | 看 一 下 苹 果 7 341 | 想 买 睡 衣 , 但 是 又 怕 短 了 342 | 这 个 颜 色 的 开 衫 外 搭 配 什 么 样 , 的 什 么 样 的 颜 色 的 裙 子 , 好 看 343 | 夏 季 学 生 长 裙 344 | 胖 妹 女 装 345 | 万 家 林 空 气 清 新 机 346 | 黄 金 347 | 在 干 嘛 干 嘛 , 不 没 有 书 , 8 斤 要 那 个 拉 杆 吃 348 | 苹 果 笔 记 本 349 | 海 底 捞 火 锅 料 350 | 就 我 想 买 那 个 表 下 面 就 有 351 | 我 要 买 皮 裙 352 | 夏 天 拉 拉 裤 353 | 推 荐 一 款 性 价 比 高 , 不 易 脱 妆 的 气 垫 354 | 魔 方 三 级 355 | 5 寸 屏 的 v i v o 手 机 356 | 多 平 台 357 | 自 粘 书 皮 358 | 雪 宝 毛 绒 毕 业 玩 具 359 | 什 么 牌 子 的 睡 衣 好 360 | 我 买 水 果 361 | 我 要 的 是 卫 衣 362 | O P P O A 3 1 363 | 长 袖 加 绒 364 | 而 且 , 我 给 他 买 滴 , 是 聊 套 衣 服 365 | 婴 儿 卫 衣 外 出 服 366 | 十 块 以 内 ! ! 367 | 破 洞 牛 仔 裤 上 衣 搭 配 什 么 368 | 面 膜 是 睡 眠 面 膜 369 | 有 没 有 什 么 好 看 的 衣 服 和 裤 子 呀 370 | 老 人 护 理 垫 , 卧 床 老 人 用 的 371 | 美 妆 工 具 372 | 爷 爷 8 0 大 寿 孙 女 该 送 什 么 礼 物 合 适 ? 373 | 大 王 天 使 374 | 我 想 要 情 侣 鞋 375 | 女 人 补 血 , 买 什 么 药 376 | 我 要 买 硬 盘 377 | 斜 背 小 包 女 378 | 春 秋 上 衣 打 底 衫 T 恤 衫 379 | 显 瘦 连 衣 长 裙 380 | 我 想 买 东 西 可 是 淘 宝 地 址 填 不 到 这 里 啊 381 | 浅 蓝 色 牛 仔 外 套 女 装 2 0 1 7 新 款 382 | 芝 士 383 | 超 薄 胸 罩 384 | 我 还 想 买 我 买 过 的 水 壶 385 | 我 要 买 女 生 穿 的 单 鞋 386 | 我 想 要 中 年 加 肥 女 春 装 387 | 我 想 买 丰 田 考 斯 特 的 操 作 台 , 防 光 垫 儿 为 什 么 咱 们 这 没 有 呢 , 是 没 上 架 是 怎 么 回 事 儿 388 | 春 季 套 装 韩 版 , 389 | 美 容 床 390 | 6 0 0 0 以 上 391 | 青 年 男 装 392 | 8 G 内 存 条 393 | 敏 感 护 肤 394 | 胖 m m 喇 叭 牛 仔 裤 卖 一 送 一 395 | 1 0 0 0 ~ 3 0 0 0 396 | 剃 须 刀 电 路 板 397 | u 型 简 欧 沙 发 398 | 老 板 椅 399 | 有 没 有 电 动 的 伸 缩 蚊 帐 吗 ? 400 | 二 锅 头 多 少 钱 401 | 牙 膏 美 白 多 少 钱 402 | 气 泡 矿 泉 水 多 少 钱 403 | 我 要 买 金 领 冠 珍 护 404 | 修 身 的 裙 子 405 | 我 要 买 灭 蚊 水 406 | 微 尔 多 少 钱 407 | 我 要 买 眼 镜 小 猫 瓜 子 408 | 沙 士 多 少 钱 409 | 我 要 买 蓝 月 亮 漂 白 水 410 | 光 明 优 多 少 钱 411 | 米 饭 速 食 多 少 钱 412 | 我 要 买 酥 性 饼 干 413 | 我 要 买 吊 床 414 | 我 要 买 蔬 菜 沙 拉 即 食 415 | 疏 通 剂 多 少 钱 416 | 我 要 买 凉 枕 头 417 | 我 要 买 抽 取 式 卫 生 纸 418 | 我 要 买 荞 麦 面 条 荞 麦 挂 面 419 | 我 要 买 凉 鞋 420 | 上 好 佳 多 少 钱 421 | 糙 米 多 少 钱 422 | 我 要 买 盐 津 423 | 我 要 买 甲 醛 检 测 仪 424 | 我 要 买 口 红 425 | 张 贴 面 膜 426 | 麦 克 风 427 | 我 要 买 豆 豉 鱼 罐 头 428 | 银 耳 糯 耳 多 少 钱 429 | 我 要 买 特 色 小 吃 430 | 我 要 买 灭 蚊 拍 电 蚊 子 拍 431 | 金 装 清 风 多 少 钱 432 | 凑 单 多 少 钱 433 | 我 要 买 秋 衣 434 | 我 要 买 喷 雾 瓶 435 | 我 要 买 楼 兰 蜜 语 红 枣 436 | 诺 基 亚 437 | 消 化 全 麦 饼 干 多 少 钱 438 | 我 要 买 罗 兰 香 皂 439 | 脱 脂 牛 奶 1 l 1 2 盒 箱 多 少 钱 440 | 鲜 水 果 多 少 钱 441 | 我 要 买 拔 丝 肉 松 蛋 糕 442 | 我 要 买 小 鱿 鱼 仔 443 | 我 要 买 乡 乡 嘴 444 | 我 要 买 儿 童 车 三 轮 车 445 | 海 绵 拖 把 头 替 换 多 少 钱 446 | 海 鲜 零 食 多 少 钱 447 | 我 要 买 蒙 牛 纯 牛 奶 袋 装 448 | 我 要 买 自 动 雨 伞 449 | 儿 童 蚊 香 液 无 味 婴 儿 多 少 钱 450 | 我 要 买 洗 衣 皂 粉 451 | 好 奇 金 装 多 少 钱 452 | 奶 瓶 p p s u 多 少 钱 453 | 中 脉 454 | 花 椒 面 多 少 钱 455 | 我 要 买 美 德 乐 哺 乳 文 胸 456 | 我 要 买 天 猫 生 鲜 457 | 我 要 买 厨 帮 酱 油 458 | 袋 装 鲜 牛 奶 多 少 钱 459 | 大 头 菜 多 少 钱 460 | 儿 童 杯 多 少 钱 461 | 我 要 买 进 口 果 泥 462 | 我 要 买 垃 圾 袋 大 号 463 | 鸡 汤 多 少 钱 464 | 无 芯 纸 多 少 钱 465 | 我 要 买 鱿 鱼 足 片 466 | 我 要 买 雨 衣 467 | 优 形 电 烤 鸡 胸 肉 片 多 少 钱 468 | 浪 莎 内 裤 女 多 少 钱 469 | 皇 冠 470 | 我 要 买 小 番 茄 圣 女 果 西 红 柿 471 | 旋 转 拖 把 头 多 少 钱 472 | 我 要 买 细 砂 糖 烘 焙 473 | 我 要 买 酒 曲 米 酒 曲 甜 酒 曲 474 | 女 童 裤 袜 475 | 绿 伞 洗 衣 机 槽 清 洁 剂 多 少 钱 476 | 明 治 酸 奶 多 少 钱 477 | 我 要 买 六 神 宝 宝 478 | 奥 妙 洗 衣 粉 全 自 动 3 k g 多 少 钱 479 | 我 要 买 生 猪 肉 480 | 我 要 买 温 奶 器 481 | 我 要 买 儿 童 刷 牙 杯 子 482 | 我 要 买 泡 椒 1 483 | 我 要 买 寿 司 帘 竹 帘 484 | 我 要 买 紫 甘 蓝 485 | 我 要 买 宝 宝 花 露 水 486 | 乐 事 薯 片 7 0 g 多 少 钱 487 | 我 要 买 奶 粉 罐 488 | 洗 脸 巾 一 次 性 多 少 钱 489 | 旺 仔 牛 奶 多 少 钱 490 | 洗 鞋 刷 子 多 少 钱 491 | 葡 萄 籽 多 少 钱 492 | 我 要 买 冰 红 茶 柠 檬 味 493 | 我 要 买 进 口 肠 494 | v i t a c o c o 椰 子 水 多 少 钱 495 | 我 要 买 恒 都 牛 排 496 | 女 童 连 衣 裙 497 | 刀 削 面 方 便 面 多 少 钱 498 | 我 要 买 米 油 499 | 我 要 买 西 王 油 500 | 婴 儿 一 段 奶 粉 多 少 钱 501 | 欧 莱 雅 女 士 多 少 钱 502 | u s b 数 据 线 多 少 钱 503 | 学 生 奶 多 少 钱 504 | 万 字 酱 油 多 少 钱 505 | 茶 树 菇 多 少 钱 506 | 凉 鞋 女 童 507 | 洗 面 奶 508 | 我 要 买 贵 州 干 辣 椒 509 | 我 要 买 丽 丽 贝 尔 化 妆 棉 510 | 公 主 裙 511 | 波 士 顿 龙 虾 多 少 钱 512 | 我 想 要 布 鞋 513 | 燕 塘 甜 牛 奶 多 少 钱 514 | 我 要 买 阿 迪 达 斯 套 装 515 | 桃 片 多 少 钱 516 | 我 要 买 套 套 情 趣 男 用 安 全 套 517 | 妙 妙 多 少 钱 518 | 袋 鼠 红 酒 多 少 钱 519 | 买 躺 椅 520 | 老 面 包 多 少 钱 521 | 西 餐 刀 叉 多 少 钱 522 | 外 婆 菜 多 少 钱 523 | 烤 鸡 翅 多 少 钱 524 | 好 525 | 成 人 牙 刷 多 少 钱 526 | 隐 形 眼 镜 护 理 液 多 少 钱 527 | 我 要 买 驴 肉 528 | 短 裤 529 | 我 要 买 油 沾 米 530 | m 巾 多 少 钱 531 | 山 核 桃 仁 小 包 装 多 少 钱 532 | 我 要 买 鸿 毛 药 酒 533 | 猪 大 排 多 少 钱 534 | 麻 烦 说 下 牛 奶 最 近 降 价 没 , 好 吗 535 | 干 燥 除 湿 多 少 钱 536 | 我 要 买 饭 爷 537 | 我 要 买 吸 管 538 | 香 肠 整 箱 多 少 钱 539 | 洗 头 膏 套 装 多 少 钱 540 | 我 要 买 马 桶 除 臭 541 | 我 要 买 镜 542 | 我 要 买 妙 妙 鱿 鱼 味 卷 543 | 果 粉 多 少 钱 544 | 英 雄 545 | 我 要 买 4 2 寸 的 电 视 546 | 我 要 买 蘸 酱 547 | 发 胶 喷 雾 多 少 钱 548 | 丝 毛 多 少 钱 549 | 我 要 买 蓝 牙 耳 机 550 | 我 要 买 鲜 鱿 鱼 551 | 我 要 买 雪 花 片 积 木 552 | 肤 乐 维 肤 霜 多 少 钱 553 | 买 气 球 554 | 红 富 士 多 少 钱 555 | 蒸 蛋 多 少 钱 556 | 我 要 买 帮 宝 适 n b 557 | 买 抽 纸 558 | 我 要 买 黑 人 漱 口 水 559 | 我 要 买 法 兰 琳 卡 面 膜 560 | 我 要 买 甘 蔗 561 | 我 要 买 花 花 公 子 562 | 我 要 买 拖 把 海 绵 替 换 头 563 | 可 爱 564 | 我 要 买 爱 他 美 p r e 565 | 我 要 买 加 菲 猫 护 肤 品 566 | 我 要 买 桂 格 燕 麦 饼 干 567 | 插 头 多 少 钱 568 | 我 要 买 山 核 桃 瓜 子 569 | 百 草 味 鸭 舌 多 少 钱 570 | 卫 生 巾 超 长 夜 用 多 少 钱 571 | 我 要 买 脱 脂 牛 奶 1 l 572 | 我 要 买 防 蚊 喷 雾 儿 童 573 | 早 餐 冲 饮 谷 物 多 少 钱 574 | 九 阳 破 壁 机 575 | 烤 多 少 钱 576 | 红 杏 干 多 少 钱 577 | 我 要 买 农 夫 山 泉 水 柠 檬 578 | 手 动 剃 须 刀 多 少 钱 579 | 儿 童 游 泳 圈 多 少 钱 580 | 氧 多 少 钱 581 | 我 要 买 刀 削 面 削 面 刀 582 | 衣 物 除 菌 液 多 少 钱 583 | 沐 浴 露 女 多 少 钱 584 | 我 要 买 食 品 收 纳 盒 585 | 我 要 买 阿 舍 食 堂 586 | 学 生 奶 粉 多 少 钱 587 | 冰 糖 雪 梨 多 少 钱 588 | 盆 子 多 少 钱 589 | 我 要 买 泰 国 香 米 茉 莉 香 米 原 装 进 口 大 米 590 | 香 水 沐 浴 露 多 少 钱 591 | 闷 烧 杯 多 少 钱 592 | 我 要 买 玉 米 热 狗 肠 593 | 我 要 买 笋 干 即 食 594 | 韩 国 进 口 饮 料 多 少 钱 595 | 唇 膏 596 | 我 想 买 安 眠 药 597 | 我 要 买 小 白 熊 奶 瓶 消 毒 器 598 | 我 要 买 生 花 生 米 花 生 仁 599 | 雀 巢 能 恩 3 段 多 少 钱 600 | 家 具 安 装 601 | 爱 得 利 奶 嘴 多 少 钱 602 | 短 款 的 603 | 我 要 买 微 波 炉 饭 盒 604 | 减 肥 605 | 香 水 女 士 多 少 钱 606 | o p p o A 7 p l u s 607 | 我 要 买 厨 房 调 料 盒 608 | 麦 饭 石 煎 锅 多 少 钱 609 | 波 力 海 苔 卷 多 少 钱 610 | 我 要 买 妙 洁 百 洁 布 611 | 茉 莉 花 茶 612 | 凯 儿 得 乐 纸 尿 裤 多 少 钱 613 | 挂 钩 吸 盘 多 少 钱 614 | 我 要 买 冬 虫 夏 草 615 | 定 制 616 | 青 岛 纯 生 啤 酒 5 0 0 m l 多 少 钱 617 | 锅 刷 多 少 钱 618 | 我 要 买 小 紫 薯 619 | 蒸 鱼 酱 油 多 少 钱 620 | 背 带 裙 621 | 果 干 蜜 饯 多 少 钱 622 | 电 池 炉 多 少 钱 623 | 我 要 买 满 婷 沐 浴 露 624 | 洗 面 奶 女 多 少 钱 625 | 我 要 买 欧 德 堡 全 脂 纯 牛 奶 626 | 我 要 买 海 天 拌 饭 酱 627 | 我 要 买 麦 片 早 餐 628 | 我 要 买 果 浦 629 | 我 要 买 卫 生 纸 实 心 630 | 买 二 免 一 牙 膏 多 少 钱 631 | 我 要 买 儿 童 保 温 杯 632 | 湿 纸 巾 婴 儿 多 少 钱 633 | 我 要 买 婴 儿 衣 服 634 | 我 要 买 橙 汁 浓 缩 635 | 我 要 买 耐 克 636 | 抽 纸 整 箱 2 4 包 多 少 钱 637 | 肥 皂 内 衣 专 用 多 少 钱 638 | 我 要 买 榛 子 坚 果 639 | 蓝 月 亮 洁 厕 液 多 少 钱 640 | 我 要 买 水 果 糖 混 合 水 果 味 进 口 641 | 我 要 买 保 温 桶 3 0 4 不 锈 钢 642 | 我 要 买 保 温 碗 643 | 我 要 买 v s 沙 宣 洗 发 水 644 | 我 要 买 耶 汁 645 | 我 要 买 爽 身 粉 宝 宝 痱 子 粉 646 | 我 要 买 被 罩 647 | 隆 力 奇 沐 浴 露 多 少 钱 648 | 华 为 p 9 多 少 钱 649 | 我 要 买 辣 椒 油 瓶 650 | 我 要 买 辣 豆 腐 651 | 我 要 买 浴 室 防 滑 垫 652 | 我 要 买 黑 糖 麻 花 653 | 儿 童 毛 巾 多 少 钱 654 | 伴 面 多 少 钱 655 | 我 要 买 海 马 656 | 我 要 买 长 鼻 王 657 | 红 豆 薏 米 粉 658 | 花 洒 659 | 好 孩 子 奶 嘴 多 少 钱 660 | 春 雨 661 | 电 磁 炉 多 少 钱 662 | 大 益 普 洱 茶 多 少 钱 663 | 我 要 买 滋 源 无 硅 油 664 | 悠 哈 奶 糖 多 少 钱 665 | 我 要 买 牛 仔 裤 男 666 | 我 要 买 调 味 汁 667 | 柴 火 大 院 五 常 稻 花 香 米 多 少 钱 668 | 银 项 链 多 少 钱 669 | 我 要 买 炒 面 大 王 670 | 浴 巾 纯 棉 多 少 钱 671 | 我 要 买 辣 672 | 蜘 蛛 王 女 鞋 673 | 买 台 式 机 固 态 硬 盘 674 | 我 要 买 新 生 儿 衣 服 675 | 我 要 买 无 糖 苏 打 饼 干 676 | 我 要 买 笼 屉 677 | 充 电 器 苹 果 多 少 钱 678 | 伊 利 雪 糕 多 少 钱 679 | 我 要 买 满 9 9 减 5 0 零 食 680 | 我 要 买 模 具 681 | 婴 儿 纸 巾 多 少 钱 682 | 我 要 买 龙 井 茶 683 | 我 要 买 特 步 684 | 韩 国 烤 肉 酱 多 少 钱 685 | 家 具 美 容 686 | 雪 莲 果 多 少 钱 687 | 我 要 买 m a m a 688 | 木 糖 醇 多 少 钱 689 | 七 号 南 孚 电 池 多 少 钱 690 | 卫 生 纸 清 风 多 少 钱 691 | 新 疆 红 枣 多 少 钱 692 | 我 要 买 怡 口 莲 太 妃 糖 693 | 养 胃 多 少 钱 694 | 想 买 点 保 健 品 695 | 吉 他 多 少 钱 696 | 我 要 买 竹 叶 青 酒 697 | 防 辐 射 眼 镜 698 | 我 要 买 儿 童 滑 板 车 699 | 我 要 买 凝 胶 700 | 深 层 清 洁 701 | 我 要 买 辣 片 零 食 702 | 盒 纸 多 少 钱 703 | 我 要 买 补 水 面 膜 补 水 保 湿 704 | 薇 儿 卫 生 巾 多 少 钱 705 | 我 要 买 腊 肠 706 | 橘 子 工 坊 多 少 钱 707 | 豆 浆 粉 冲 饮 多 少 钱 708 | 毛 毯 盖 毯 多 少 钱 709 | 浴 室 垫 多 少 钱 710 | 光 明 莫 斯 利 安 酸 奶 多 少 钱 711 | 我 要 买 隔 离 霜 妆 前 乳 712 | 我 要 买 今 之 逸 品 713 | 我 要 买 拖 鞋 男 714 | 植 物 医 生 多 少 钱 715 | 洗 发 水 控 油 多 少 钱 716 | 我 要 买 伞 折 叠 717 | 土 豆 饼 多 少 钱 718 | 猕 猴 桃 多 少 钱 719 | 收 缩 毛 孔 720 | 我 要 买 儿 童 牙 杯 721 | 清 风 卷 纸 多 少 钱 722 | 我 要 买 糯 米 粉 723 | 咖 啡 饮 料 多 少 钱 724 | 我 要 买 潘 婷 护 发 素 乳 液 修 护 7 5 0 m l 725 | 早 晚 牙 膏 多 少 钱 726 | 丁 香 茶 多 少 钱 727 | 手 机 m a t e 9 728 | 我 要 买 一 次 性 内 裤 孕 妇 产 妇 产 后 月 子 用 品 729 | 我 要 买 蜀 道 香 牛 肉 干 730 | 我 要 买 潘 婷 洗 发 水 4 0 0 m l 731 | 拉 芳 多 少 钱 732 | 我 要 买 辣 妹 子 733 | 花 花 公 子 多 少 钱 734 | 我 要 买 提 735 | 水 晶 之 恋 多 少 钱 736 | 馒 头 干 烤 馍 片 多 少 钱 737 | 我 要 买 双 鱼 米 醋 738 | 科 罗 纳 多 少 钱 739 | 乐 百 氏 多 少 钱 740 | 迷 你 榨 汁 机 多 少 钱 741 | 男 士 袜 子 多 少 钱 742 | 辣 翻 天 多 少 钱 743 | 空 调 风 扇 多 少 钱 744 | 我 要 买 糖 果 袋 745 | 磨 牙 饼 干 6 个 月 多 少 钱 746 | 毛 巾 纯 棉 洗 脸 儿 童 多 少 钱 747 | 我 要 买 藤 席 凉 席 三 件 套 748 | 我 要 买 美 加 净 洗 面 奶 749 | 纯 真 酸 奶 多 少 钱 750 | 我 要 买 金 莲 751 | 甘 竹 多 少 钱 752 | 我 要 买 鲜 羊 奶 753 | 我 要 买 小 镜 子 迷 你 754 | 干 面 包 片 多 少 钱 755 | 婴 儿 油 多 少 钱 756 | 沐 浴 条 多 少 钱 757 | 我 要 买 酒 水 758 | 我 要 买 和 路 雪 759 | 我 要 买 饭 盒 袋 手 提 袋 760 | 我 要 买 槟 榔 761 | 我 要 买 龟 苓 膏 梧 州 762 | 我 要 买 b o o t s 763 | 乐 事 黄 瓜 多 少 钱 764 | 我 要 买 葡 萄 干 独 立 小 包 装 765 | 我 要 买 柠 檬 水 整 箱 766 | 调 味 酱 多 少 钱 767 | 汉 服 768 | 谷 粒 多 黑 谷 牛 奶 多 少 钱 769 | 束 腹 带 多 少 钱 770 | 瓶 装 多 少 钱 771 | 网 上 买 手 机 靠 谱 吗 772 | 我 要 买 亮 净 洁 厕 精 773 | 子 初 蚊 香 液 多 少 钱 774 | 我 要 买 转 换 器 插 头 775 | 我 要 买 洗 发 水 飘 柔 776 | 好 奇 银 装 纸 尿 裤 多 少 钱 777 | 我 要 买 安 慕 希 酸 奶 香 草 味 778 | 卫 生 纸 无 芯 多 少 钱 779 | 多 芬 喷 雾 多 少 钱 780 | 零 手 付 买 手 机 781 | 一 次 性 纸 杯 多 少 钱 782 | 我 要 买 婴 儿 磨 牙 783 | 连 体 裤 784 | 我 要 买 消 毒 器 785 | 天 多 少 钱 786 | 外 套 男 787 | 高 跟 鞋 夏 季 多 少 钱 788 | 我 要 买 沙 士 789 | 我 要 买 一 叶 子 790 | 我 要 买 个 老 人 机 791 | 我 要 买 汉 堡 饼 792 | 我 要 买 茶 花 衣 架 793 | 我 要 买 调 料 罐 玻 璃 794 | 我 要 买 果 园 老 农 795 | 我 要 买 厕 纸 卫 生 纸 796 | 我 要 买 日 本 牙 刷 797 | 我 要 买 拉 杆 箱 女 798 | 我 要 买 泡 茶 壶 799 | -------------------------------------------------------------------------------- /data/EC/test/id.txt: -------------------------------------------------------------------------------- 1 | 0 2 | 1 3 | 2 4 | 3 5 | 4 6 | 5 7 | 6 8 | 7 9 | 8 10 | 9 11 | 10 12 | 11 13 | 12 14 | 13 15 | 14 16 | 15 17 | 16 18 | 17 19 | 18 20 | 19 21 | 20 22 | 21 23 | 22 24 | 23 25 | 24 26 | 25 27 | 26 28 | 27 29 | 28 30 | 29 31 | 30 32 | 31 33 | 32 34 | 33 35 | 34 36 | 35 37 | 36 38 | 37 39 | 38 40 | 39 41 | 40 42 | 41 43 | 42 44 | 43 45 | 44 46 | 45 47 | 46 48 | 47 49 | 48 50 | 49 51 | 50 52 | 51 53 | 52 54 | 53 55 | 54 56 | 55 57 | 56 58 | 57 59 | 58 60 | 59 61 | 60 62 | 61 63 | 62 64 | 63 65 | 64 66 | 65 67 | 66 68 | 67 69 | 68 70 | 69 71 | 70 72 | 71 73 | 72 74 | 73 75 | 74 76 | 75 77 | 76 78 | 77 79 | 78 80 | 79 81 | 80 82 | 81 83 | 82 84 | 83 85 | 84 86 | 85 87 | 86 88 | 87 89 | 88 90 | 89 91 | 90 92 | 91 93 | 92 94 | 93 95 | 94 96 | 95 97 | 96 98 | 97 99 | 98 100 | 99 101 | 100 102 | 101 103 | 102 104 | 103 105 | 104 106 | 105 107 | 106 108 | 107 109 | 108 110 | 109 111 | 110 112 | 111 113 | 112 114 | 113 115 | 114 116 | 115 117 | 116 118 | 117 119 | 118 120 | 119 121 | 120 122 | 121 123 | 122 124 | 123 125 | 124 126 | 125 127 | 126 128 | 127 129 | 128 130 | 129 131 | 130 132 | 131 133 | 132 134 | 133 135 | 134 136 | 135 137 | 136 138 | 137 139 | 138 140 | 139 141 | 140 142 | 141 143 | 142 144 | 143 145 | 144 146 | 145 147 | 146 148 | 147 149 | 148 150 | 149 151 | 150 152 | 151 153 | 152 154 | 153 155 | 154 156 | 155 157 | 156 158 | 157 159 | 158 160 | 159 161 | 160 162 | 161 163 | 162 164 | 163 165 | 164 166 | 165 167 | 166 168 | 167 169 | 168 170 | 169 171 | 170 172 | 171 173 | 172 174 | 173 175 | 174 176 | 175 177 | 176 178 | 177 179 | 178 180 | 179 181 | 180 182 | 181 183 | 182 184 | 183 185 | 184 186 | 185 187 | 186 188 | 187 189 | 188 190 | 189 191 | 190 192 | 191 193 | 192 194 | 193 195 | 194 196 | 195 197 | 196 198 | 197 199 | 198 200 | 199 201 | 200 202 | 201 203 | 202 204 | 203 205 | 204 206 | 205 207 | 206 208 | 207 209 | 208 210 | 209 211 | 210 212 | 211 213 | 212 214 | 213 215 | 214 216 | 215 217 | 216 218 | 217 219 | 218 220 | 219 221 | 220 222 | 221 223 | 222 224 | 223 225 | 224 226 | 225 227 | 226 228 | 227 229 | 228 230 | 229 231 | 230 232 | 231 233 | 232 234 | 233 235 | 234 236 | 235 237 | 236 238 | 237 239 | 238 240 | 239 241 | 240 242 | 241 243 | 242 244 | 243 245 | 244 246 | 245 247 | 246 248 | 247 249 | 248 250 | 249 251 | 250 252 | 251 253 | 252 254 | 253 255 | 254 256 | 255 257 | 256 258 | 257 259 | 258 260 | 259 261 | 260 262 | 261 263 | 262 264 | 263 265 | 264 266 | 265 267 | 266 268 | 267 269 | 268 270 | 269 271 | 270 272 | 271 273 | 272 274 | 273 275 | 274 276 | 275 277 | 276 278 | 277 279 | 278 280 | 279 281 | 280 282 | 281 283 | 282 284 | 283 285 | 284 286 | 285 287 | 286 288 | 287 289 | 288 290 | 289 291 | 290 292 | 291 293 | 292 294 | 293 295 | 294 296 | 295 297 | 296 298 | 297 299 | 298 300 | 299 301 | 300 302 | 301 303 | 302 304 | 303 305 | 304 306 | 305 307 | 306 308 | 307 309 | 308 310 | 309 311 | 310 312 | 311 313 | 312 314 | 313 315 | 314 316 | 315 317 | 316 318 | 317 319 | 318 320 | 319 321 | 320 322 | 321 323 | 322 324 | 323 325 | 324 326 | 325 327 | 326 328 | 327 329 | 328 330 | 329 331 | 330 332 | 331 333 | 332 334 | 333 335 | 334 336 | 335 337 | 336 338 | 337 339 | 338 340 | 339 341 | 340 342 | 341 343 | 342 344 | 343 345 | 344 346 | 345 347 | 346 348 | 347 349 | 348 350 | 349 351 | 350 352 | 351 353 | 352 354 | 353 355 | 354 356 | 355 357 | 356 358 | 357 359 | 358 360 | 359 361 | 360 362 | 361 363 | 362 364 | 363 365 | 364 366 | 365 367 | 366 368 | 367 369 | 368 370 | 369 371 | 370 372 | 371 373 | 372 374 | 373 375 | 374 376 | 375 377 | 376 378 | 377 379 | 378 380 | 379 381 | 380 382 | 381 383 | 382 384 | 383 385 | 384 386 | 385 387 | 386 388 | 387 389 | 388 390 | 389 391 | 390 392 | 391 393 | 392 394 | 393 395 | 394 396 | 395 397 | 396 398 | 397 399 | 398 400 | 399 401 | 400 402 | 401 403 | 402 404 | 403 405 | 404 406 | 405 407 | 406 408 | 407 409 | 408 410 | 409 411 | 410 412 | 411 413 | 412 414 | 413 415 | 414 416 | 415 417 | 416 418 | 417 419 | 418 420 | 419 421 | 420 422 | 421 423 | 422 424 | 423 425 | 424 426 | 425 427 | 426 428 | 427 429 | 428 430 | 429 431 | 430 432 | 431 433 | 432 434 | 433 435 | 434 436 | 435 437 | 436 438 | 437 439 | 438 440 | 439 441 | 440 442 | 441 443 | 442 444 | 443 445 | 444 446 | 445 447 | 446 448 | 447 449 | 448 450 | 449 451 | 450 452 | 451 453 | 452 454 | 453 455 | 454 456 | 455 457 | 456 458 | 457 459 | 458 460 | 459 461 | 460 462 | 461 463 | 462 464 | 463 465 | 464 466 | 465 467 | 466 468 | 467 469 | 468 470 | 469 471 | 470 472 | 471 473 | 472 474 | 473 475 | 474 476 | 475 477 | 476 478 | 477 479 | 478 480 | 479 481 | 480 482 | 481 483 | 482 484 | 483 485 | 484 486 | 485 487 | 486 488 | 487 489 | 488 490 | 489 491 | 490 492 | 491 493 | 492 494 | 493 495 | 494 496 | 495 497 | 496 498 | 497 499 | 498 500 | 499 501 | 500 502 | 501 503 | 502 504 | 503 505 | 504 506 | 505 507 | 506 508 | 507 509 | 508 510 | 509 511 | 510 512 | 511 513 | 512 514 | 513 515 | 514 516 | 515 517 | 516 518 | 517 519 | 518 520 | 519 521 | 520 522 | 521 523 | 522 524 | 523 525 | 524 526 | 525 527 | 526 528 | 527 529 | 528 530 | 529 531 | 530 532 | 531 533 | 532 534 | 533 535 | 534 536 | 535 537 | 536 538 | 537 539 | 538 540 | 539 541 | 540 542 | 541 543 | 542 544 | 543 545 | 544 546 | 545 547 | 546 548 | 547 549 | 548 550 | 549 551 | 550 552 | 551 553 | 552 554 | 553 555 | 554 556 | 555 557 | 556 558 | 557 559 | 558 560 | 559 561 | 560 562 | 561 563 | 562 564 | 563 565 | 564 566 | 565 567 | 566 568 | 567 569 | 568 570 | 569 571 | 570 572 | 571 573 | 572 574 | 573 575 | 574 576 | 575 577 | 576 578 | 577 579 | 578 580 | 579 581 | 580 582 | 581 583 | 582 584 | 583 585 | 584 586 | 585 587 | 586 588 | 587 589 | 588 590 | 589 591 | 590 592 | 591 593 | 592 594 | 593 595 | 594 596 | 595 597 | 596 598 | 597 599 | 598 600 | 599 601 | 600 602 | 601 603 | 602 604 | 603 605 | 604 606 | 605 607 | 606 608 | 607 609 | 608 610 | 609 611 | 610 612 | 611 613 | 612 614 | 613 615 | 614 616 | 615 617 | 616 618 | 617 619 | 618 620 | 619 621 | 620 622 | 621 623 | 622 624 | 623 625 | 624 626 | 625 627 | 626 628 | 627 629 | 628 630 | 629 631 | 630 632 | 631 633 | 632 634 | 633 635 | 634 636 | 635 637 | 636 638 | 637 639 | 638 640 | 639 641 | 640 642 | 641 643 | 642 644 | 643 645 | 644 646 | 645 647 | 646 648 | 647 649 | 648 650 | 649 651 | 650 652 | 651 653 | 652 654 | 653 655 | 654 656 | 655 657 | 656 658 | 657 659 | 658 660 | 659 661 | 660 662 | 661 663 | 662 664 | 663 665 | 664 666 | 665 667 | 666 668 | 667 669 | 668 670 | 669 671 | 670 672 | 671 673 | 672 674 | 673 675 | 674 676 | 675 677 | 676 678 | 677 679 | 678 680 | 679 681 | 680 682 | 681 683 | 682 684 | 683 685 | 684 686 | 685 687 | 686 688 | 687 689 | 688 690 | 689 691 | 690 692 | 691 693 | 692 694 | 693 695 | 694 696 | 695 697 | 696 698 | 697 699 | 698 700 | 699 701 | 700 702 | 701 703 | 702 704 | 703 705 | 704 706 | 705 707 | 706 708 | 707 709 | 708 710 | 709 711 | 710 712 | 711 713 | 712 714 | 713 715 | 714 716 | 715 717 | 716 718 | 717 719 | 718 720 | 719 721 | 720 722 | 721 723 | 722 724 | 723 725 | 724 726 | 725 727 | 726 728 | 727 729 | 728 730 | 729 731 | 730 732 | 731 733 | 732 734 | 733 735 | 734 736 | 735 737 | 736 738 | 737 739 | 738 740 | 739 741 | 740 742 | 741 743 | 742 744 | 743 745 | 744 746 | 745 747 | 746 748 | 747 749 | 748 750 | 749 751 | 750 752 | 751 753 | 752 754 | 753 755 | 754 756 | 755 757 | 756 758 | 757 759 | 758 760 | 759 761 | 760 762 | 761 763 | 762 764 | 763 765 | 764 766 | 765 767 | 766 768 | 767 769 | 768 770 | 769 771 | 770 772 | 771 773 | 772 774 | 773 775 | 774 776 | 775 777 | 776 778 | 777 779 | 778 780 | 779 781 | 780 782 | 781 783 | 782 784 | 783 785 | 784 786 | 785 787 | 786 788 | 787 789 | 788 790 | 789 791 | 790 792 | 791 793 | 792 794 | 793 795 | 794 796 | 795 797 | 796 798 | 797 799 | -------------------------------------------------------------------------------- /data/EC/test/tags.txt: -------------------------------------------------------------------------------- 1 | B-cp I-cp 2 | O O O O O O O B-cp I-cp 3 | O O O O O O B-cp I-cp 4 | O O O B-gg I-gg I-gg I-gg O 5 | O O O B-cp I-cp I-cp O 6 | B-pp I-pp B-xh I-xh I-xh B-gg I-gg 7 | O O O 8 | B-cp I-cp I-cp O O O 9 | O O O O O O O O O O O O 10 | O O O O B-cp I-cp I-cp 11 | O B-cp I-cp 12 | O O O B-cp I-cp 13 | O O O O O O O 14 | O O B-cp I-cp I-cp 15 | B-cp I-cp I-cp 16 | O O O O O B-cp I-cp 17 | B-pp I-pp I-pp 18 | O O O O 19 | O B-cp I-cp 20 | O O B-cp I-cp I-cp 21 | O O O O O O O B-cp I-cp B-cp I-cp 22 | O O O O O O O O 23 | O O O B-cp O O O O O O O O O O O O O O O 24 | O O O O 25 | B-cp 26 | B-cp I-cp I-cp 27 | O O B-cp I-cp 28 | B-cp I-cp O O O O O 29 | O O O B-cp I-cp I-cp 30 | O O O B-cp I-cp I-cp I-cp O O O 31 | O O O O O O O O O O O O O O O O O O O O O O O 32 | B-cp I-cp I-cp I-cp I-cp 33 | O O B-cp I-cp 34 | O O O 35 | O O O O O O O B-cp 36 | B-pp I-pp I-pp I-pp B-xh I-xh O O B-cp I-cp I-cp 37 | O O O B-cp I-cp 38 | O O O O B-cp I-cp I-cp 39 | O O O O O O O O O O O B-cp I-cp 40 | O O O O O O O O O O O O O O B-cp 41 | O O O O O O B-cp O O O O O O O O 42 | B-cp I-cp I-cp 43 | B-cp I-cp I-cp O O O O O 44 | O O O O O O O O O O O 45 | B-cp I-cp O O 46 | O O O O O O O O O O O O O O O O O O O O O O O O O 47 | O O O B-cp I-cp 48 | O O O O O O O O 49 | O O O O O O O O B-cp I-cp 50 | O O O O O B-cp I-cp 51 | B-pp I-pp B-xh I-xh B-cp I-cp I-cp 52 | O O O O O B-cp I-cp I-cp 53 | O O O O O O 54 | O B-cp I-cp I-cp O O 55 | O O O B-cp I-cp I-cp O O O O O O B-cp I-cp I-cp 56 | B-cp I-cp I-cp I-cp 57 | B-yl I-yl B-cp I-cp 58 | O O O O O O O 59 | O O O O O O O O O O O O O O O O O O O O O O O O O 60 | O O O O B-cp I-cp I-cp I-cp I-cp O 61 | O O O O 62 | O O O B-cp I-cp I-cp B-xh O B-cp I-cp 63 | B-cp O O O O O O O 64 | O O B-pp I-pp B-pp I-pp B-xh I-xh 65 | O O O B-cp I-cp O O O 66 | O B-cp I-cp 67 | O B-pp I-pp B-xh I-xh B-cp I-cp 68 | O O B-cp I-cp 69 | B-cp I-cp 70 | O B-cp I-cp 71 | O O O O O O O B-cp I-cp 72 | O O O O O O O O O O O O O O O B-cp I-cp O 73 | O B-cp I-cp I-cp 74 | O O O O O B-cp I-cp I-cp O O O 75 | B-cp I-cp I-cp O O 76 | O O 77 | O O O O 78 | O O O O O O O O O O O O O O 79 | B-cp I-cp I-cp O B-cp I-cp I-cp I-cp O O O O O O 80 | O O O O O O O O O B-cp I-cp 81 | O O O O 82 | O O O O O O O O O O O B-cp I-cp I-cp 83 | O O O O O O O O O O O O O O O B-cp I-cp 84 | B-pp I-pp 85 | O O O B-cp I-cp I-cp I-cp I-cp 86 | O O O O O O O B-cp I-cp I-cp O O O O 87 | B-yl I-yl B-cp I-cp I-cp I-cp O 88 | B-pp I-pp I-pp B-xh I-xh B-cp I-cp O O O O O O O O O O O 89 | O O O O 90 | B-pp I-pp I-pp 91 | O O O O O O O O O O 92 | O O O B-cp I-cp I-cp 93 | O O B-cp I-cp B-cp I-cp O O O 94 | O O O O O O O 95 | O O B-cp I-cp I-cp 96 | O O B-cp I-cp O 97 | O O O B-cp I-cp I-cp 98 | O O O B-cp I-cp I-cp 99 | O O O B-cp I-cp 100 | O O B-cp I-cp I-cp I-cp 101 | O O B-cp I-cp 102 | O O 103 | O O O O O O O O B-cp I-cp O O O O O O O O O O O O 104 | O O O O O O O O O O O 105 | O O O O O O O O 106 | O O B-cp I-cp O 107 | O O O O O O B-cp O O O 108 | O O O O O O O O O O O O O O 109 | B-pp I-pp B-cp I-cp I-cp 110 | B-cp I-cp O 111 | O O O O O O O O B-cp I-cp I-cp I-cp 112 | B-cp I-cp I-cp 113 | O O B-cp I-cp O O O 114 | O O B-cp I-cp I-cp 115 | O O O O O O O O O O O O O O O O O O 116 | B-pp I-pp B-cp I-cp O O O O O O 117 | O O O O O B-cp I-cp 118 | B-cp I-cp I-cp 119 | B-pp I-pp I-pp I-pp 120 | O O O O B-cp I-cp B-cp I-cp O B-cp I-cp I-cp 121 | O O O O O O B-cp I-cp I-cp I-cp I-cp I-cp O O O O O O 122 | O O O O O O O 123 | O O O O O O O O 124 | B-cp I-cp I-cp I-cp B-xh I-xh 125 | O O B-cp I-cp I-cp 126 | O O B-cp I-cp I-cp I-cp 127 | O O O B-cp I-cp 128 | O O O B-cp I-cp I-cp 129 | O O O O O O O B-cp I-cp 130 | O O O O O O B-cp I-cp O 131 | O O O B-gg I-gg B-cp I-cp 132 | O O B-cp I-cp I-cp 133 | O O O B-cp I-cp I-cp I-cp O O O O O O O 134 | O O O O O B-cp I-cp I-cp I-cp 135 | O O O O O B-cp I-cp 136 | O O O O O O O O O O O O O O O O O O 137 | O O O 138 | O O O O O O O O O O O O O O O O O O O O O B-cp I-cp O O O O O O O O O O O O O O O B-cp I-cp O 139 | B-gg I-gg I-gg I-gg I-gg B-cp I-cp I-cp 140 | B-cp I-cp I-cp I-cp I-cp 141 | O O O O O O O B-cp I-cp I-cp 142 | B-pp I-pp B-cp I-cp O B-pp I-pp O O O 143 | O O B-cp I-cp O O O O B-gg I-gg I-gg B-cp I-cp O O 144 | O O O B-cp I-cp I-cp I-cp I-cp 145 | O O O O O O O O 146 | O O O O O O O O O O O O B-cp I-cp 147 | O O O O B-cp I-cp I-cp I-cp O B-cp I-cp 148 | O O O B-cp I-cp B-cp I-cp I-cp O B-cp 149 | O O B-cp I-cp 150 | O O O O O O O 151 | O O O O O O O O O O O O O O O O O O O O O O 152 | O O O B-cp I-cp I-cp 153 | O O O B-cp I-cp I-cp O O O O O O O O O O 154 | O O O B-cp I-cp O O O O O 155 | O O O O O O O O O O O O 156 | B-cp I-cp I-cp 157 | O O B-cp I-cp 158 | B-cp I-cp 159 | O O O O O O O O O O O O 160 | O O B-cp I-cp O O O O O O O 161 | O B-cp I-cp O O O O O O O O O 162 | O O 163 | O O O O O O 164 | B-cp B-cp B-cp 165 | B-pp I-pp I-pp 166 | B-cp I-cp I-cp 167 | O O O B-pp I-pp O O B-cp I-cp 168 | O O O O O B-cp I-cp 169 | B-yl I-yl B-cp 170 | O O O O O O O O O O O O B-cp I-cp 171 | O O B-cp I-cp I-cp 172 | O O O O B-cp I-cp 173 | B-cp I-cp I-cp I-cp I-cp 174 | O O O O O O O O O O B-cp I-cp I-cp I-cp I-cp O O O O O O O O O O O O O 175 | O O O O O 176 | O O O 177 | O O O O 178 | O O O 179 | B-cp I-cp I-cp 180 | O O O B-cp I-cp 181 | B-pp I-pp B-xh I-xh I-xh 182 | O O O O 183 | O O O O O B-cp I-cp I-cp 184 | O O O O B-cp I-cp 185 | O O O O B-cp I-cp I-cp 186 | O O O B-cp I-cp I-cp I-cp 187 | B-cp I-cp I-cp I-cp I-cp 188 | B-cp I-cp I-cp O O O O O 189 | O O O O O O O O B-cp I-cp O O O 190 | O O B-cp I-cp I-cp 191 | O O O O O O O O O O 192 | O O B-cp I-cp 193 | O O O O O O 194 | B-cp I-cp I-cp O O O O O 195 | O O O O O O O O O O B-pp I-pp I-pp I-pp O O B-cp I-cp I-cp B-gg I-gg I-gg B-xh I-xh I-xh I-xh I-xh 196 | O B-cp I-cp 197 | O O O B-cp I-cp 198 | O O O B-cp I-cp O O O O O O O O O O O O 199 | O O O O O O O O O O O O 200 | B-cp I-cp I-cp O B-cp I-cp I-cp O O 201 | B-cp I-cp I-cp I-cp I-cp 202 | B-cp I-cp I-cp B-gg I-gg O O 203 | O O O O O O O O O O O O O O O O O O O O O O O O O O 204 | O O O B-cp I-cp I-cp I-cp 205 | O O O O O B-cp I-cp O O O 206 | O O O O O O O O O O O O O O O O 207 | B-cp I-cp I-cp I-cp 208 | O O B-cp I-cp I-cp 209 | B-cp I-cp I-cp O O 210 | O O O O O O B-cp I-cp O O O O O O O O O O 211 | O O O B-cp I-cp 212 | O O O O O O O O O 213 | O O O O 214 | O O B-cp I-cp I-cp O 215 | O O O O O O B-cp I-cp 216 | O O O O O O O O B-cp I-cp 217 | O O B-cp I-cp I-cp O O O 218 | O O O O O O O O O B-pp I-pp I-pp B-cp I-cp I-cp I-cp 219 | O O O O O O O O O O 220 | O 221 | O O O B-cp I-cp I-cp 222 | O O O B-cp I-cp I-cp 223 | B-pp I-pp 224 | O O O O O B-cp I-cp O O O O O O O 225 | O O 226 | O O O B-cp I-cp 227 | O O B-cp I-cp I-cp I-cp 228 | B-cp I-cp I-cp O O 229 | O O O B-cp I-cp I-cp O O O O O O O B-cp I-cp I-cp I-cp 230 | O O O O O 231 | O O O O B-cp 232 | O O B-cp I-cp 233 | O O B-cp I-cp O O O O O 234 | O O O O O O O O O O O B-yl B-cp I-cp B-cp I-cp O O O O O O O 235 | O O O O O B-cp I-cp I-cp I-cp 236 | O B-cp I-cp I-cp I-cp O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B-cp I-cp I-cp I-cp O O O O O O O O O O O O O O O O O O O O 237 | O O O B-cp I-cp 238 | B-cp I-cp I-cp O O 239 | O O O B-pp I-pp I-pp I-pp 240 | B-pp I-pp O O O O O O 241 | O O 242 | O O O O B-cp I-cp 243 | O O 244 | O O O B-cp I-cp I-cp I-cp I-cp 245 | O O O O O 246 | O O O B-cp I-cp 247 | B-pp I-pp I-pp I-pp O B-cp I-cp 248 | O O O O O O B-cp I-cp 249 | B-cp I-cp I-cp B-cp I-cp I-cp 250 | O O O O O O B-cp O O O O O O O 251 | O O O O O B-cp I-cp 252 | O B-cp I-cp I-cp O 253 | O O O O 254 | O O B-pp I-pp B-cp I-cp I-cp 255 | O O O O O O O O O O O 256 | O O B-cp I-cp I-cp 257 | O O O O O O B-cp I-cp 258 | O O O 259 | O B-cp I-cp I-cp 260 | O O B-cp I-cp I-cp O O 261 | O O 262 | O O O O O O B-cp I-cp 263 | O O O O B-cp I-cp I-cp 264 | O O O O B-cp I-cp I-cp 265 | O O O B-yl I-yl O B-cp I-cp 266 | O O O O 267 | B-cp I-cp B-cp I-cp I-cp I-cp 268 | O O O O O 269 | B-cp I-cp I-cp 270 | O O O O B-cp I-cp I-cp 271 | O O O O O O O O O O O O O O O 272 | O O B-cp I-cp I-cp 273 | O B-pp I-pp B-cp I-cp 274 | O O O O O O O O 275 | B-cp I-cp I-cp O O O 276 | B-pp I-pp I-pp O 277 | O O O O B-cp I-cp I-cp 278 | O O B-cp O O O O O O O O O O 279 | B-cp I-cp I-cp I-cp 280 | O O O O B-cp I-cp I-cp I-cp 281 | O O O O 282 | B-cp I-cp I-cp 283 | O O O B-cp I-cp 284 | B-gg I-gg O 285 | O O O O O O B-cp I-cp I-cp O O O 286 | B-cp I-cp 287 | O B-cp I-cp I-cp 288 | B-cp I-cp I-cp O 289 | O O O O O O O O B-cp I-cp I-cp 290 | O O O B-cp I-cp I-cp 291 | B-cp I-cp I-cp 292 | B-cp I-cp I-cp 293 | O B-cp I-cp I-cp I-cp 294 | O O O O B-cp I-cp 295 | B-cp I-cp O O O 296 | O O O B-cp 297 | O O O O O O O O O O O 298 | O O O O O B-cp I-cp O O 299 | O O B-cp I-cp I-cp 300 | O O O 301 | O O O O B-pp I-pp B-xh I-xh I-xh I-xh I-xh I-xh O B-cp I-cp I-cp I-cp 302 | O O O B-cp I-cp I-cp I-cp 303 | O O O 304 | O O O O O O B-cp I-cp 305 | O O O O B-cp I-cp I-cp 306 | O O O O B-cp I-cp 307 | O O O O O B-cp 308 | B-pp I-pp B-cp I-cp B-gg I-gg 309 | O O B-cp I-cp 310 | O O B-cp I-cp O O O O 311 | B-cp I-cp O O 312 | B-cp I-cp I-cp 313 | O O O O O O B-cp I-cp 314 | O 315 | O O B-cp I-cp 316 | B-cp I-cp B-yl I-yl B-cp I-cp 317 | O B-cp I-cp I-cp O B-cp I-cp O O 318 | B-pp I-pp I-pp I-pp I-pp I-pp I-pp I-pp I-pp I-pp B-cp I-cp 319 | B-cp I-cp O O 320 | O O O O O O O 321 | O O O O O B-cp I-cp I-cp 322 | O O O O 323 | B-cp I-cp 324 | O O B-cp I-cp 325 | O O O 326 | O O O B-cp I-cp 327 | O O O O O O O O 328 | O O O O O O O O 329 | O O B-cp I-cp I-cp 330 | O B-cp O O B-cp 331 | O O O O O O O O O O O B-cp I-cp O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O 332 | O O O O O O 333 | O O O O O O O O B-cp I-cp I-cp I-cp I-cp 334 | O O O O O O O O O O O O O O O O O O O O O O O O O O O 335 | O O B-cp I-cp O 336 | O O O O O B-cp I-cp O O O O O O O O O O 337 | O O O O O O O O O O O 338 | O O O O O O B-cp I-cp 339 | O O O B-cp O O O O 340 | O O O B-pp I-pp B-xh 341 | O O B-cp I-cp O O O O O O O 342 | O O O O O B-cp I-cp O O O O O O O O O O O O O O O B-cp I-cp O O O 343 | O O O O B-cp I-cp 344 | O O B-cp I-cp 345 | B-pp I-pp I-pp B-cp I-cp I-cp I-cp I-cp 346 | B-cp I-cp 347 | O O O O O O O O O O O O O O O O O O O 348 | B-pp I-pp B-cp I-cp I-cp 349 | O O O B-cp I-cp I-cp 350 | O O O O O O B-cp O O O O O 351 | O O O B-cp I-cp 352 | O O B-cp I-cp I-cp 353 | O O O O O O O O O O O O O O B-cp I-cp 354 | B-cp I-cp O O 355 | B-gg I-gg O O B-pp I-pp I-pp I-pp B-cp I-cp 356 | O O O 357 | O O B-cp I-cp 358 | B-pp I-pp O O O O B-cp I-cp 359 | O O O O O B-cp I-cp O 360 | O O B-cp I-cp 361 | O O O O B-cp I-cp 362 | B-pp I-pp I-pp I-pp O B-xh I-xh I-xh 363 | O O O O 364 | O O O O O O O O O O O O B-cp I-cp 365 | B-cp I-cp I-cp I-cp B-cp I-cp I-cp 366 | O O O O O O 367 | O O B-cp I-cp I-cp B-cp I-cp O O O O 368 | B-cp I-cp O O O B-cp I-cp 369 | O O O O O O O O B-cp I-cp O B-cp I-cp O 370 | B-cp I-cp I-cp I-cp I-cp O O O O O O O 371 | B-cp I-cp I-cp I-cp 372 | O O O O O O O O O O O O O O O O O O 373 | B-pp I-pp B-xh I-xh 374 | O O O B-cp I-cp I-cp 375 | O O O O O O O O B-cp 376 | O O O B-cp I-cp 377 | O O O B-cp O 378 | O O O B-cp I-cp O B-cp I-cp I-cp O B-cp I-cp I-cp 379 | O O B-cp I-cp I-cp I-cp 380 | O O O O O O O O O O O O O O O O O 381 | O O O B-yl I-yl B-cp I-cp B-cp I-cp O O O O O O 382 | B-cp I-cp 383 | O O B-cp I-cp 384 | O O O O O O O O B-cp I-cp 385 | O O O O O O O B-cp I-cp 386 | O O O O O O O O B-cp I-cp 387 | O O O B-cp I-cp I-cp I-cp I-cp O B-cp I-cp I-cp O B-cp I-cp I-cp O O O O O O O O O O O O O O O O O O O O O 388 | O O B-cp I-cp O O O 389 | B-cp I-cp I-cp 390 | O O O O O O 391 | O O B-cp I-cp 392 | B-gg I-gg B-cp I-cp I-cp 393 | O O O O 394 | O O O O O B-cp I-cp I-cp O O O O 395 | O O O O O O O O O 396 | B-cp I-cp I-cp I-cp I-cp I-cp 397 | O O O O B-cp I-cp 398 | B-cp I-cp I-cp 399 | O O O O O O O O B-cp I-cp O O 400 | B-cp I-cp I-cp O O O 401 | B-cp I-cp O O O O O 402 | B-cp I-cp I-cp I-cp I-cp O O O 403 | O O O B-cp I-cp I-cp I-cp I-cp 404 | O O O B-cp I-cp 405 | O O O B-cp I-cp I-cp 406 | B-pp I-pp O O O 407 | O O O B-pp I-pp I-pp I-pp B-cp I-cp 408 | B-cp I-cp O O O 409 | O O O B-pp I-pp I-pp B-cp I-cp I-cp 410 | B-pp I-pp B-xh O O O 411 | B-cp I-cp O O O O O 412 | O O O B-cp I-cp I-cp I-cp 413 | O O O B-cp I-cp 414 | O O O B-yl I-yl B-cp I-cp O O 415 | B-cp I-cp I-cp O O O 416 | O O O B-cp I-cp I-cp 417 | O O O O O O B-cp I-cp I-cp 418 | O O O B-yl I-yl B-cp I-cp O B-yl I-yl B-cp I-cp 419 | O O O B-cp I-cp 420 | B-pp I-pp I-pp O O O 421 | B-cp I-cp O O O 422 | O O O B-cp I-cp 423 | O O O B-cp I-cp I-cp I-cp I-cp 424 | O O O B-cp I-cp 425 | O O B-cp I-cp 426 | B-cp I-cp I-cp 427 | O O O B-yl I-yl B-cp I-cp I-cp 428 | B-cp I-cp O B-cp I-cp O O O 429 | O O O B-cp I-cp I-cp I-cp 430 | O O O B-cp I-cp I-cp B-cp I-cp I-cp I-cp 431 | O O B-cp I-cp O O O 432 | O O O O O 433 | O O O B-cp I-cp 434 | O O O B-cp I-cp I-cp 435 | O O O B-pp I-pp I-pp I-pp B-cp I-cp 436 | B-pp I-pp I-pp 437 | O O B-yl I-yl B-cp I-cp O O O 438 | O O O B-pp I-pp B-cp I-cp 439 | B-cp I-cp I-cp I-cp B-gg I-gg O B-gg I-gg I-gg O B-gg O O O 440 | B-cp I-cp I-cp O O O 441 | O O O O O O O O O 442 | O O O O B-cp I-cp I-cp 443 | O O O B-pp I-pp I-pp 444 | O O O B-cp I-cp I-cp O B-cp I-cp I-cp 445 | B-yl I-yl B-cp I-cp I-cp O O O O O O 446 | B-yl I-yl B-cp I-cp O O O 447 | O O O B-pp I-pp B-cp I-cp I-cp O O 448 | O O O B-cp I-cp I-cp I-cp 449 | B-cp I-cp I-cp I-cp I-cp O O O O O O O O O 450 | O O O B-cp I-cp I-cp I-cp 451 | B-pp I-pp B-xh I-xh O O O 452 | B-cp I-cp B-yl I-yl I-yl I-yl O O O 453 | B-pp I-pp 454 | B-cp I-cp I-cp O O O 455 | O O O B-pp I-pp I-pp B-cp I-cp I-cp I-cp 456 | O O O B-pp I-pp B-cp I-cp 457 | O O O B-pp I-pp B-cp I-cp 458 | B-gg I-gg B-cp I-cp I-cp O O O 459 | B-cp I-cp I-cp O O O 460 | O O O B-cp O O O 461 | O O O O O B-cp I-cp 462 | O O O B-cp I-cp I-cp O O 463 | B-cp I-cp O O O 464 | B-cp I-cp I-cp O O O 465 | O O O B-cp I-cp I-cp I-cp 466 | O O O B-cp I-cp 467 | B-pp I-pp O O B-cp I-cp I-cp I-cp O O O 468 | B-pp I-pp B-cp I-cp O O O O 469 | B-pp I-pp 470 | O O O B-cp I-cp I-cp B-cp I-cp I-cp B-cp I-cp I-cp 471 | B-cp I-cp I-cp I-cp I-cp O O O 472 | O O O B-cp I-cp I-cp O O O 473 | O O O B-cp I-cp O B-cp I-cp I-cp O B-cp I-cp I-cp 474 | O O B-cp I-cp 475 | B-pp I-pp B-cp I-cp I-cp I-cp I-cp I-cp I-cp O O O 476 | B-pp I-pp B-cp I-cp O O O 477 | O O O B-pp I-pp O O 478 | B-pp I-pp B-cp I-cp I-cp O O O B-gg I-gg I-gg O O O 479 | O O O B-cp I-cp I-cp 480 | O O O B-cp I-cp I-cp 481 | O O O O O B-cp I-cp I-cp O 482 | O O O B-cp I-cp O 483 | O O O B-cp I-cp I-cp B-cp I-cp 484 | O O O B-cp I-cp I-cp 485 | O O O B-cp I-cp I-cp I-cp I-cp 486 | B-pp I-pp B-cp I-cp B-gg I-gg I-gg O O O 487 | O O O B-cp I-cp I-cp 488 | B-cp I-cp I-cp O O O O O O 489 | B-pp I-pp O B-cp I-cp O O O 490 | O O B-cp I-cp O O O 491 | B-cp I-cp I-cp O O O 492 | O O O B-cp I-cp I-cp O O O O 493 | O O O B-cp I-cp I-cp 494 | B-pp I-pp I-pp I-pp I-pp I-pp I-pp I-pp I-pp B-cp I-cp I-cp O O O 495 | O O O B-pp I-pp B-cp I-cp 496 | O O B-cp I-cp I-cp 497 | B-cp I-cp I-cp B-cp I-cp I-cp O O O 498 | O O O B-cp B-cp 499 | O O O B-pp I-pp B-cp 500 | O O O O B-cp I-cp O O O 501 | B-pp I-pp I-pp O O O O O 502 | B-cp I-cp I-cp I-cp I-cp I-cp O O O 503 | B-cp I-cp I-cp O O O 504 | B-pp I-pp B-cp I-cp O O O 505 | B-cp I-cp I-cp O O O 506 | B-cp I-cp O O 507 | B-cp I-cp I-cp 508 | O O O O O B-cp I-cp I-cp 509 | O O O B-pp I-pp I-pp I-pp B-cp I-cp I-cp 510 | B-cp I-cp I-cp 511 | B-cp I-cp I-cp I-cp I-cp O O O 512 | O O O B-cp I-cp 513 | B-pp I-pp B-cp I-cp I-cp O O O 514 | O O O B-pp I-pp I-pp I-pp B-cp I-cp 515 | B-cp I-cp O O O 516 | O O O B-cp I-cp O O O O O O O B-cp I-cp I-cp 517 | B-cp I-cp O O O 518 | B-pp I-pp B-cp I-cp O O O 519 | O B-cp I-cp 520 | B-cp I-cp I-cp O O O 521 | O O B-cp I-cp O O O 522 | B-cp I-cp I-cp O O O 523 | B-cp I-cp I-cp O O O 524 | O 525 | B-cp I-cp I-cp I-cp O O O 526 | B-cp I-cp I-cp I-cp I-cp I-cp I-cp O O O 527 | O O O B-cp I-cp 528 | B-cp I-cp 529 | O O O B-cp I-cp I-cp 530 | B-cp I-cp O O O 531 | B-cp I-cp I-cp I-cp O O O O O O 532 | O O O B-pp I-pp B-cp I-cp 533 | B-cp I-cp I-cp O O O 534 | O O O O B-cp I-cp O O O O O O O O 535 | O O O O O O O 536 | O O O B-pp I-pp 537 | O O O B-cp I-cp 538 | B-cp I-cp B-gg I-gg O O O 539 | B-cp I-cp I-cp I-cp I-cp O O O 540 | O O O B-cp I-cp I-cp I-cp 541 | O O O B-cp 542 | O O O B-pp I-pp B-cp I-cp I-cp I-cp 543 | B-cp I-cp O O O 544 | B-pp I-pp 545 | O O O B-gg I-gg I-gg O B-cp I-cp 546 | O O O B-cp I-cp 547 | B-cp I-cp I-cp I-cp I-cp O O O 548 | B-cp I-cp O O O 549 | O O O B-cp I-cp I-cp I-cp 550 | O O O B-cp I-cp I-cp 551 | O O O B-cp I-cp I-cp I-cp I-cp 552 | B-cp I-cp I-cp I-cp I-cp O O O 553 | O B-cp I-cp 554 | B-cp I-cp I-cp O O O 555 | B-cp I-cp O O O 556 | O O O B-pp I-pp I-pp B-xh I-xh 557 | O B-cp I-cp 558 | O O O B-pp I-pp B-cp I-cp I-cp 559 | O O O B-pp I-pp I-pp I-pp B-cp I-cp 560 | O O O B-cp I-cp 561 | O O O B-cp I-cp I-cp I-cp 562 | O O O B-cp I-cp B-cp I-cp I-cp I-cp I-cp 563 | O O 564 | O O O B-pp I-pp I-pp B-xh I-xh I-xh 565 | O O O B-pp I-pp I-pp B-cp I-cp I-cp 566 | O O O B-pp I-pp B-yl I-yl B-cp I-cp 567 | B-cp I-cp O O O 568 | O O O B-cp I-cp I-cp I-cp I-cp 569 | B-pp I-pp I-pp B-cp I-cp O O O 570 | B-cp I-cp I-cp O O O O O O O 571 | O O O B-cp I-cp I-cp I-cp O B-gg I-gg 572 | O O O B-cp I-cp I-cp I-cp O O O 573 | O O B-cp I-cp I-cp I-cp O O O 574 | B-pp I-pp B-cp I-cp I-cp 575 | O O O O 576 | B-cp I-cp I-cp O O O 577 | O O O B-pp I-pp I-pp I-pp B-cp I-cp I-cp 578 | B-cp I-cp I-cp I-cp I-cp O O O 579 | O O B-cp I-cp I-cp O O O 580 | O O O O 581 | O O O O O O B-cp I-cp I-cp 582 | B-cp I-cp I-cp I-cp I-cp O O O 583 | B-cp I-cp I-cp O O O O 584 | O O O B-cp I-cp I-cp I-cp I-cp 585 | O O O B-pp I-pp I-pp I-pp 586 | B-cp I-cp I-cp I-cp O O O 587 | B-cp I-cp I-cp I-cp O O O 588 | B-cp I-cp O O O 589 | O O O O O B-cp I-cp O O B-cp I-cp O O O O O B-cp I-cp 590 | B-cp I-cp I-cp I-cp I-cp O O O 591 | B-cp I-cp I-cp O O O 592 | O O O B-cp I-cp I-cp I-cp I-cp 593 | O O O B-cp I-cp O O 594 | O O O O B-cp I-cp O O O 595 | B-cp I-cp 596 | O O O B-cp I-cp I-cp 597 | O O O B-pp I-pp I-pp B-cp I-cp I-cp I-cp I-cp 598 | O O O B-cp I-cp I-cp I-cp O B-cp I-cp I-cp 599 | B-pp I-pp B-xh I-xh O O O O O 600 | O O O O 601 | B-pp I-pp I-pp B-cp I-cp O O O 602 | O O O 603 | O O O B-cp I-cp I-cp I-cp I-cp 604 | O O 605 | B-cp I-cp O O O O O O 606 | B-pp I-pp I-pp I-pp B-xh I-xh I-xh I-xh I-xh I-xh 607 | O O O O O B-cp I-cp I-cp 608 | B-yl I-yl I-yl B-cp I-cp O O O 609 | B-pp I-pp B-cp I-cp I-cp O O O 610 | O O O B-pp I-pp O B-cp I-cp I-cp 611 | B-cp I-cp I-cp I-cp 612 | B-pp I-pp I-pp I-pp B-cp I-cp I-cp O O O 613 | B-cp I-cp O B-cp I-cp O O O 614 | O O O B-cp I-cp I-cp I-cp 615 | O O 616 | B-pp I-pp O O B-cp I-cp B-gg I-gg I-gg I-gg I-gg O O O 617 | B-cp I-cp O O O 618 | O O O O B-cp I-cp 619 | B-cp I-cp I-cp I-cp O O O 620 | B-cp I-cp I-cp 621 | B-cp I-cp B-cp I-cp O O O 622 | B-cp I-cp I-cp O O O 623 | O O O B-pp I-pp B-cp I-cp I-cp 624 | B-cp I-cp I-cp O O O O O 625 | O O O B-pp I-pp I-pp B-cp I-cp I-cp I-cp I-cp 626 | O O O B-pp I-pp B-cp I-cp I-cp 627 | O O O B-cp I-cp O O 628 | O O O B-cp I-cp 629 | O O O B-cp I-cp I-cp O O 630 | O O O O B-cp I-cp O O O 631 | O O O O O B-cp I-cp I-cp 632 | B-cp I-cp I-cp O O O O O O 633 | O O O B-cp I-cp I-cp I-cp 634 | O O O B-cp I-cp O O 635 | O O O B-pp I-pp 636 | B-cp I-cp O O B-gg I-gg I-gg O O O 637 | B-cp I-cp O O O O O O O 638 | O O O B-cp I-cp B-cp I-cp 639 | B-pp I-pp I-pp B-cp I-cp I-cp O O O 640 | O O O B-cp I-cp I-cp O O O O O O O O 641 | O O O B-cp I-cp I-cp B-yl I-yl I-yl I-yl I-yl I-yl 642 | O O O B-cp I-cp I-cp 643 | O O O B-pp I-pp B-pp I-pp B-cp I-cp I-cp 644 | O O O B-cp I-cp 645 | O O O B-cp I-cp I-cp O O B-cp I-cp I-cp 646 | O O O B-cp I-cp 647 | B-pp I-pp I-pp B-cp I-cp I-cp O O O 648 | B-pp I-pp B-xh I-xh O O O 649 | O O O B-cp I-cp I-cp O B-gg 650 | O O O B-cp I-cp I-cp 651 | O O O B-cp I-cp I-cp I-cp I-cp 652 | O O O B-cp I-cp I-cp I-cp 653 | O O O B-cp I-cp O O O 654 | B-cp I-cp O O O 655 | O O O B-cp I-cp 656 | O O O B-pp I-pp I-pp 657 | B-cp I-cp I-cp I-cp I-cp 658 | B-cp I-cp 659 | B-pp I-pp I-pp B-cp I-cp O O O 660 | B-pp I-pp 661 | B-cp I-cp I-cp O O O 662 | B-pp I-pp B-cp I-cp I-cp O O O 663 | O O O B-pp I-pp O O O 664 | B-pp I-pp B-cp I-cp O O O 665 | O O O B-cp I-cp I-cp O 666 | O O O B-cp I-cp I-cp 667 | B-pp I-pp I-pp I-pp O O O B-cp I-cp I-cp I-cp O O O 668 | B-yl B-cp I-cp O O O 669 | O O O B-cp I-cp I-cp I-cp 670 | B-cp I-cp O B-yl I-yl O O O 671 | O O O O 672 | B-pp I-pp I-pp B-cp I-cp 673 | O O O O B-cp I-cp I-cp I-cp 674 | O O O B-cp I-cp I-cp I-cp I-cp 675 | O O O O O B-cp I-cp I-cp I-cp 676 | O O O B-cp I-cp 677 | B-cp I-cp I-cp B-pp I-pp O O O 678 | B-pp I-pp B-cp I-cp O O O 679 | O O O O O O O O O B-cp I-cp 680 | O O O B-cp I-cp 681 | B-cp I-cp I-cp I-cp O O O 682 | O O O B-cp I-cp I-cp 683 | O O O B-pp I-pp 684 | B-cp I-cp I-cp I-cp I-cp O O O 685 | B-cp I-cp O O 686 | B-cp I-cp I-cp O O O 687 | O O O O O O O 688 | B-cp I-cp I-cp O O O 689 | B-gg I-gg B-pp I-pp B-cp I-cp O O O 690 | B-cp I-cp I-cp B-pp I-pp O O O 691 | O O B-cp I-cp O O O 692 | O O O B-pp I-pp I-pp B-cp I-cp I-cp 693 | O O O O O 694 | O O O B-cp I-cp I-cp 695 | B-cp I-cp O O O 696 | O O O B-cp I-cp I-cp I-cp 697 | B-cp I-cp I-cp I-cp I-cp 698 | O O O O O B-cp I-cp I-cp 699 | O O O B-cp I-cp 700 | O O O O 701 | O O O B-cp I-cp O B-cp I-cp 702 | B-cp I-cp O O O 703 | O O O O O B-cp I-cp O O O O O 704 | B-pp I-pp B-cp I-cp I-cp O O O 705 | O O O B-cp I-cp 706 | B-pp I-pp I-pp I-pp O O O 707 | B-cp I-cp I-cp O O O O O O 708 | B-cp I-cp B-cp I-cp O O O 709 | B-cp I-cp I-cp O O O 710 | B-pp I-pp B-xh I-xh I-xh I-xh B-cp I-cp O O O 711 | O O O B-cp I-cp I-cp B-cp I-cp I-cp 712 | O O O B-pp I-pp I-pp I-pp 713 | O O O B-cp I-cp O O 714 | B-pp I-pp I-pp I-pp O O O 715 | B-cp I-cp I-cp O O O O O O 716 | O O O B-cp O O O 717 | B-cp I-cp I-cp O O O 718 | B-cp I-cp I-cp O O O 719 | O O O O 720 | O O O O O B-cp I-cp 721 | B-pp I-pp O B-cp I-cp O O O 722 | O O O B-cp I-cp I-cp 723 | B-cp I-cp I-cp I-cp O O O 724 | O O O B-pp I-pp B-cp I-cp I-cp O O O O B-gg I-gg I-gg I-gg I-gg 725 | B-pp I-pp B-cp I-cp O O O 726 | B-cp I-cp I-cp O O O 727 | B-cp I-cp B-xh I-xh I-xh I-xh I-xh 728 | O O O B-cp I-cp I-cp I-cp I-cp O O O O O O O O O O O 729 | O O O B-pp I-pp I-pp B-cp I-cp I-cp 730 | O O O B-pp I-pp B-cp I-cp I-cp B-gg I-gg I-gg I-gg I-gg 731 | B-pp I-pp O O O 732 | O O O B-pp I-pp I-pp 733 | B-pp I-pp I-pp I-pp O O O 734 | O O O O 735 | B-cp I-cp I-cp I-cp O O O 736 | B-cp I-cp I-cp O B-cp I-cp I-cp O O O 737 | O O O B-pp I-pp B-cp I-cp 738 | B-pp I-pp I-pp O O O 739 | B-pp I-pp I-pp O O O 740 | O O B-cp I-cp I-cp O O O 741 | B-cp I-cp I-cp I-cp O O O 742 | B-pp I-pp I-pp O O O 743 | B-cp I-cp I-cp I-cp O O O 744 | O O O B-cp I-cp I-cp 745 | B-cp I-cp I-cp I-cp O O O O O O 746 | B-cp I-cp B-yl I-yl O O O O O O O O 747 | O O O B-cp I-cp B-cp I-cp B-cp I-cp I-cp 748 | O O O B-pp I-pp I-pp B-cp I-cp I-cp 749 | B-pp I-pp B-cp I-cp O O O 750 | O O O B-cp I-cp 751 | B-cp I-cp O O O 752 | O O O B-cp I-cp I-cp 753 | O O O O B-cp I-cp O O O 754 | B-cp I-cp I-cp I-cp O O O 755 | B-cp I-cp I-cp O O O 756 | B-cp I-cp I-cp O O O 757 | O O O B-cp I-cp 758 | O O O B-pp I-pp I-pp 759 | O O O B-cp I-cp I-cp O B-cp I-cp I-cp 760 | O O O B-cp I-cp 761 | O O O B-cp I-cp I-cp O O 762 | O O O B-pp I-pp I-pp I-pp I-pp 763 | B-pp I-pp O O O O O 764 | O O O B-cp I-cp I-cp O O O O O 765 | O O O B-cp I-cp I-cp O O 766 | B-cp I-cp I-cp O O O 767 | B-cp I-cp 768 | B-pp I-pp I-pp B-xh I-xh B-cp I-cp O O O 769 | B-cp I-cp I-cp O O O 770 | O O O O O 771 | O O O B-cp I-cp O O O 772 | O O O B-pp I-pp B-cp I-cp I-cp 773 | B-pp I-pp B-cp I-cp I-cp O O O 774 | O O O B-cp I-cp I-cp I-cp I-cp 775 | O O O B-cp I-cp I-cp B-pp I-pp 776 | B-pp I-pp B-xh I-xh B-cp I-cp I-cp O O O 777 | O O O B-pp I-pp I-pp B-cp I-cp O O O 778 | B-cp I-cp I-cp O O O O O 779 | B-pp I-pp B-cp I-cp O O O 780 | O O O O B-cp I-cp 781 | O O O B-cp I-cp O O O 782 | O O O O O O O 783 | B-cp I-cp I-cp 784 | O O O B-cp I-cp I-cp 785 | O O O O 786 | B-cp I-cp O 787 | B-cp I-cp I-cp O O O O O 788 | O O O B-cp I-cp 789 | O O O B-pp I-pp I-pp 790 | O O O O B-cp I-cp I-cp 791 | O O O B-cp I-cp I-cp 792 | O O O B-pp I-pp B-cp I-cp 793 | O O O B-cp I-cp I-cp O B-yl I-yl 794 | O O O B-pp I-pp I-pp I-pp 795 | O O O B-cp I-cp B-cp I-cp I-cp 796 | O O O O O B-cp I-cp 797 | O O O B-cp I-cp I-cp O 798 | O O O O B-cp I-cp 799 | -------------------------------------------------------------------------------- /data/EC/train/id.txt: -------------------------------------------------------------------------------- 1 | 0 2 | 1 3 | 2 4 | 3 5 | 4 6 | 5 7 | 6 8 | 7 9 | 8 10 | 9 11 | 10 12 | 11 13 | 12 14 | 13 15 | 14 16 | 15 17 | 16 18 | 17 19 | 18 20 | 19 21 | 20 22 | 21 23 | 22 24 | 23 25 | 24 26 | 25 27 | 26 28 | 27 29 | 28 30 | 29 31 | 30 32 | 31 33 | 32 34 | 33 35 | 34 36 | 35 37 | 36 38 | 37 39 | 38 40 | 39 41 | 40 42 | 41 43 | 42 44 | 43 45 | 44 46 | 45 47 | 46 48 | 47 49 | 48 50 | 49 51 | 50 52 | 51 53 | 52 54 | 53 55 | 54 56 | 55 57 | 56 58 | 57 59 | 58 60 | 59 61 | 60 62 | 61 63 | 62 64 | 63 65 | 64 66 | 65 67 | 66 68 | 67 69 | 68 70 | 69 71 | 70 72 | 71 73 | 72 74 | 73 75 | 74 76 | 75 77 | 76 78 | 77 79 | 78 80 | 79 81 | 80 82 | 81 83 | 82 84 | 83 85 | 84 86 | 85 87 | 86 88 | 87 89 | 88 90 | 89 91 | 90 92 | 91 93 | 92 94 | 93 95 | 94 96 | 95 97 | 96 98 | 97 99 | 98 100 | 99 101 | 100 102 | 101 103 | 102 104 | 103 105 | 104 106 | 105 107 | 106 108 | 107 109 | 108 110 | 109 111 | 110 112 | 111 113 | 112 114 | 113 115 | 114 116 | 115 117 | 116 118 | 117 119 | 118 120 | 119 121 | 120 122 | 121 123 | 122 124 | 123 125 | 124 126 | 125 127 | 126 128 | 127 129 | 128 130 | 129 131 | 130 132 | 131 133 | 132 134 | 133 135 | 134 136 | 135 137 | 136 138 | 137 139 | 138 140 | 139 141 | 140 142 | 141 143 | 142 144 | 143 145 | 144 146 | 145 147 | 146 148 | 147 149 | 148 150 | 149 151 | 150 152 | 151 153 | 152 154 | 153 155 | 154 156 | 155 157 | 156 158 | 157 159 | 158 160 | 159 161 | 160 162 | 161 163 | 162 164 | 163 165 | 164 166 | 165 167 | 166 168 | 167 169 | 168 170 | 169 171 | 170 172 | 171 173 | 172 174 | 173 175 | 174 176 | 175 177 | 176 178 | 177 179 | 178 180 | 179 181 | 180 182 | 181 183 | 182 184 | 183 185 | 184 186 | 185 187 | 186 188 | 187 189 | 188 190 | 189 191 | 190 192 | 191 193 | 192 194 | 193 195 | 194 196 | 195 197 | 196 198 | 197 199 | 198 200 | 199 201 | 200 202 | 201 203 | 202 204 | 203 205 | 204 206 | 205 207 | 206 208 | 207 209 | 208 210 | 209 211 | 210 212 | 211 213 | 212 214 | 213 215 | 214 216 | 215 217 | 216 218 | 217 219 | 218 220 | 219 221 | 220 222 | 221 223 | 222 224 | 223 225 | 224 226 | 225 227 | 226 228 | 227 229 | 228 230 | 229 231 | 230 232 | 231 233 | 232 234 | 233 235 | 234 236 | 235 237 | 236 238 | 237 239 | 238 240 | 239 241 | 240 242 | 241 243 | 242 244 | 243 245 | 244 246 | 245 247 | 246 248 | 247 249 | 248 250 | 249 251 | 250 252 | 251 253 | 252 254 | 253 255 | 254 256 | 255 257 | 256 258 | 257 259 | 258 260 | 259 261 | 260 262 | 261 263 | 262 264 | 263 265 | 264 266 | 265 267 | 266 268 | 267 269 | 268 270 | 269 271 | 270 272 | 271 273 | 272 274 | 273 275 | 274 276 | 275 277 | 276 278 | 277 279 | 278 280 | 279 281 | 280 282 | 281 283 | 282 284 | 283 285 | 284 286 | 285 287 | 286 288 | 287 289 | 288 290 | 289 291 | 290 292 | 291 293 | 292 294 | 293 295 | 294 296 | 295 297 | 296 298 | 297 299 | 298 300 | 299 301 | 300 302 | 301 303 | 302 304 | 303 305 | 304 306 | 305 307 | 306 308 | 307 309 | 308 310 | 309 311 | 310 312 | 311 313 | 312 314 | 313 315 | 314 316 | 315 317 | 316 318 | 317 319 | 318 320 | 319 321 | 320 322 | 321 323 | 322 324 | 323 325 | 324 326 | 325 327 | 326 328 | 327 329 | 328 330 | 329 331 | 330 332 | 331 333 | 332 334 | 333 335 | 334 336 | 335 337 | 336 338 | 337 339 | 338 340 | 339 341 | 340 342 | 341 343 | 342 344 | 343 345 | 344 346 | 345 347 | 346 348 | 347 349 | 348 350 | 349 351 | 350 352 | 351 353 | 352 354 | 353 355 | 354 356 | 355 357 | 356 358 | 357 359 | 358 360 | 359 361 | 360 362 | 361 363 | 362 364 | 363 365 | 364 366 | 365 367 | 366 368 | 367 369 | 368 370 | 369 371 | 370 372 | 371 373 | 372 374 | 373 375 | 374 376 | 375 377 | 376 378 | 377 379 | 378 380 | 379 381 | 380 382 | 381 383 | 382 384 | 383 385 | 384 386 | 385 387 | 386 388 | 387 389 | 388 390 | 389 391 | 390 392 | 391 393 | 392 394 | 393 395 | 394 396 | 395 397 | 396 398 | 397 399 | 398 400 | 399 401 | 400 402 | 401 403 | 402 404 | 403 405 | 404 406 | 405 407 | 406 408 | 407 409 | 408 410 | 409 411 | 410 412 | 411 413 | 412 414 | 413 415 | 414 416 | 415 417 | 416 418 | 417 419 | 418 420 | 419 421 | 420 422 | 421 423 | 422 424 | 423 425 | 424 426 | 425 427 | 426 428 | 427 429 | 428 430 | 429 431 | 430 432 | 431 433 | 432 434 | 433 435 | 434 436 | 435 437 | 436 438 | 437 439 | 438 440 | 439 441 | 440 442 | 441 443 | 442 444 | 443 445 | 444 446 | 445 447 | 446 448 | 447 449 | 448 450 | 449 451 | 450 452 | 451 453 | 452 454 | 453 455 | 454 456 | 455 457 | 456 458 | 457 459 | 458 460 | 459 461 | 460 462 | 461 463 | 462 464 | 463 465 | 464 466 | 465 467 | 466 468 | 467 469 | 468 470 | 469 471 | 470 472 | 471 473 | 472 474 | 473 475 | 474 476 | 475 477 | 476 478 | 477 479 | 478 480 | 479 481 | 480 482 | 481 483 | 482 484 | 483 485 | 484 486 | 485 487 | 486 488 | 487 489 | 488 490 | 489 491 | 490 492 | 491 493 | 492 494 | 493 495 | 494 496 | 495 497 | 496 498 | 497 499 | 498 500 | 499 501 | 500 502 | 501 503 | 502 504 | 503 505 | 504 506 | 505 507 | 506 508 | 507 509 | 508 510 | 509 511 | 510 512 | 511 513 | 512 514 | 513 515 | 514 516 | 515 517 | 516 518 | 517 519 | 518 520 | 519 521 | 520 522 | 521 523 | 522 524 | 523 525 | 524 526 | 525 527 | 526 528 | 527 529 | 528 530 | 529 531 | 530 532 | 531 533 | 532 534 | 533 535 | 534 536 | 535 537 | 536 538 | 537 539 | 538 540 | 539 541 | 540 542 | 541 543 | 542 544 | 543 545 | 544 546 | 545 547 | 546 548 | 547 549 | 548 550 | 549 551 | 550 552 | 551 553 | 552 554 | 553 555 | 554 556 | 555 557 | 556 558 | 557 559 | 558 560 | 559 561 | 560 562 | 561 563 | 562 564 | 563 565 | 564 566 | 565 567 | 566 568 | 567 569 | 568 570 | 569 571 | 570 572 | 571 573 | 572 574 | 573 575 | 574 576 | 575 577 | 576 578 | 577 579 | 578 580 | 579 581 | 580 582 | 581 583 | 582 584 | 583 585 | 584 586 | 585 587 | 586 588 | 587 589 | 588 590 | 589 591 | 590 592 | 591 593 | 592 594 | 593 595 | 594 596 | 595 597 | 596 598 | 597 599 | 598 600 | 599 601 | 600 602 | 601 603 | 602 604 | 603 605 | 604 606 | 605 607 | 606 608 | 607 609 | 608 610 | 609 611 | 610 612 | 611 613 | 612 614 | 613 615 | 614 616 | 615 617 | 616 618 | 617 619 | 618 620 | 619 621 | 620 622 | 621 623 | 622 624 | 623 625 | 624 626 | 625 627 | 626 628 | 627 629 | 628 630 | 629 631 | 630 632 | 631 633 | 632 634 | 633 635 | 634 636 | 635 637 | 636 638 | 637 639 | 638 640 | 639 641 | 640 642 | 641 643 | 642 644 | 643 645 | 644 646 | 645 647 | 646 648 | 647 649 | 648 650 | 649 651 | 650 652 | 651 653 | 652 654 | 653 655 | 654 656 | 655 657 | 656 658 | 657 659 | 658 660 | 659 661 | 660 662 | 661 663 | 662 664 | 663 665 | 664 666 | 665 667 | 666 668 | 667 669 | 668 670 | 669 671 | 670 672 | 671 673 | 672 674 | 673 675 | 674 676 | 675 677 | 676 678 | 677 679 | 678 680 | 679 681 | 680 682 | 681 683 | 682 684 | 683 685 | 684 686 | 685 687 | 686 688 | 687 689 | 688 690 | 689 691 | 690 692 | 691 693 | 692 694 | 693 695 | 694 696 | 695 697 | 696 698 | 697 699 | 698 700 | 699 701 | 700 702 | 701 703 | 702 704 | 703 705 | 704 706 | 705 707 | 706 708 | 707 709 | 708 710 | 709 711 | 710 712 | 711 713 | 712 714 | 713 715 | 714 716 | 715 717 | 716 718 | 717 719 | 718 720 | 719 721 | 720 722 | 721 723 | 722 724 | 723 725 | 724 726 | 725 727 | 726 728 | 727 729 | 728 730 | 729 731 | 730 732 | 731 733 | 732 734 | 733 735 | 734 736 | 735 737 | 736 738 | 737 739 | 738 740 | 739 741 | 740 742 | 741 743 | 742 744 | 743 745 | 744 746 | 745 747 | 746 748 | 747 749 | 748 750 | 749 751 | 750 752 | 751 753 | 752 754 | 753 755 | 754 756 | 755 757 | 756 758 | 757 759 | 758 760 | 759 761 | 760 762 | 761 763 | 762 764 | 763 765 | 764 766 | 765 767 | 766 768 | 767 769 | 768 770 | 769 771 | 770 772 | 771 773 | 772 774 | 773 775 | 774 776 | 775 777 | 776 778 | 777 779 | 778 780 | 779 781 | 780 782 | 781 783 | 782 784 | 783 785 | 784 786 | 785 787 | 786 788 | 787 789 | 788 790 | 789 791 | 790 792 | 791 793 | 792 794 | 793 795 | 794 796 | 795 797 | 796 798 | 797 799 | 798 800 | 799 801 | 800 802 | 801 803 | 802 804 | 803 805 | 804 806 | 805 807 | 806 808 | 807 809 | 808 810 | 809 811 | 810 812 | 811 813 | 812 814 | 813 815 | 814 816 | 815 817 | 816 818 | 817 819 | 818 820 | 819 821 | 820 822 | 821 823 | 822 824 | 823 825 | 824 826 | 825 827 | 826 828 | 827 829 | 828 830 | 829 831 | 830 832 | 831 833 | 832 834 | 833 835 | 834 836 | 835 837 | 836 838 | 837 839 | 838 840 | 839 841 | 840 842 | 841 843 | 842 844 | 843 845 | 844 846 | 845 847 | 846 848 | 847 849 | 848 850 | 849 851 | 850 852 | 851 853 | 852 854 | 853 855 | 854 856 | 855 857 | 856 858 | 857 859 | 858 860 | 859 861 | 860 862 | 861 863 | 862 864 | 863 865 | 864 866 | 865 867 | 866 868 | 867 869 | 868 870 | 869 871 | 870 872 | 871 873 | 872 874 | 873 875 | 874 876 | 875 877 | 876 878 | 877 879 | 878 880 | 879 881 | 880 882 | 881 883 | 882 884 | 883 885 | 884 886 | 885 887 | 886 888 | 887 889 | 888 890 | 889 891 | 890 892 | 891 893 | 892 894 | 893 895 | 894 896 | 895 897 | 896 898 | 897 899 | 898 900 | 899 901 | 900 902 | 901 903 | 902 904 | 903 905 | 904 906 | 905 907 | 906 908 | 907 909 | 908 910 | 909 911 | 910 912 | 911 913 | 912 914 | 913 915 | 914 916 | 915 917 | 916 918 | 917 919 | 918 920 | 919 921 | 920 922 | 921 923 | 922 924 | 923 925 | 924 926 | 925 927 | 926 928 | 927 929 | 928 930 | 929 931 | 930 932 | 931 933 | 932 934 | 933 935 | 934 936 | 935 937 | 936 938 | 937 939 | 938 940 | 939 941 | 940 942 | 941 943 | 942 944 | 943 945 | 944 946 | 945 947 | 946 948 | 947 949 | 948 950 | 949 951 | 950 952 | 951 953 | 952 954 | 953 955 | 954 956 | 955 957 | 956 958 | 957 959 | 958 960 | 959 961 | 960 962 | 961 963 | 962 964 | 963 965 | 964 966 | 965 967 | 966 968 | 967 969 | 968 970 | 969 971 | 970 972 | 971 973 | 972 974 | 973 975 | 974 976 | 975 977 | 976 978 | 977 979 | 978 980 | 979 981 | 980 982 | 981 983 | 982 984 | 983 985 | 984 986 | 985 987 | 986 988 | 987 989 | 988 990 | 989 991 | 990 992 | 991 993 | 992 994 | 993 995 | 994 996 | 995 997 | 996 998 | 997 999 | 998 1000 | 999 1001 | 1000 1002 | 1001 1003 | 1002 1004 | 1003 1005 | 1004 1006 | 1005 1007 | 1006 1008 | 1007 1009 | 1008 1010 | 1009 1011 | 1010 1012 | 1011 1013 | 1012 1014 | 1013 1015 | 1014 1016 | 1015 1017 | 1016 1018 | 1017 1019 | 1018 1020 | 1019 1021 | 1020 1022 | 1021 1023 | 1022 1024 | 1023 1025 | 1024 1026 | 1025 1027 | 1026 1028 | 1027 1029 | 1028 1030 | 1029 1031 | 1030 1032 | 1031 1033 | 1032 1034 | 1033 1035 | 1034 1036 | 1035 1037 | 1036 1038 | 1037 1039 | 1038 1040 | 1039 1041 | 1040 1042 | 1041 1043 | 1042 1044 | 1043 1045 | 1044 1046 | 1045 1047 | 1046 1048 | 1047 1049 | 1048 1050 | 1049 1051 | 1050 1052 | 1051 1053 | 1052 1054 | 1053 1055 | 1054 1056 | 1055 1057 | 1056 1058 | 1057 1059 | 1058 1060 | 1059 1061 | 1060 1062 | 1061 1063 | 1062 1064 | 1063 1065 | 1064 1066 | 1065 1067 | 1066 1068 | 1067 1069 | 1068 1070 | 1069 1071 | 1070 1072 | 1071 1073 | 1072 1074 | 1073 1075 | 1074 1076 | 1075 1077 | 1076 1078 | 1077 1079 | 1078 1080 | 1079 1081 | 1080 1082 | 1081 1083 | 1082 1084 | 1083 1085 | 1084 1086 | 1085 1087 | 1086 1088 | 1087 1089 | 1088 1090 | 1089 1091 | 1090 1092 | 1091 1093 | 1092 1094 | 1093 1095 | 1094 1096 | 1095 1097 | 1096 1098 | -------------------------------------------------------------------------------- /src/DSRL/mytrainer.py: -------------------------------------------------------------------------------- 1 | 2 | from tqdm import tqdm 3 | import torch 4 | import math 5 | import numpy as np 6 | import torch.nn.functional as F 7 | import constants as C 8 | from conlleval import tags_to_labels,evaluate 9 | from utils import nextBatch 10 | from torch.distributions import Categorical 11 | 12 | device = torch.device("cuda" if torch.cuda.is_available() else "cpu") 13 | 14 | class MYTrainer_PA_SL(object): 15 | """""" 16 | def __init__(self, args, tagger_mdl, policy, optimizer_tagger, optimizer_policy, criterion_sl, partial): 17 | """""" 18 | self.args = args 19 | self.tagger_model = tagger_mdl 20 | self.policy = policy 21 | self.criterion_sl = criterion_sl 22 | self.tagset_size = tagger_mdl.tagset_size 23 | self.o_tag = tagger_mdl.tags_vocab['O'] 24 | self.pad_tag = tagger_mdl.tags_vocab[C.PAD_WORD] 25 | 26 | ''' 27 | it need to define two optimizer: 28 | 1- for selector 29 | 2- for encoder+crf 30 | 31 | first, calculate the reward from encoder+crf 32 | then, calculate loss for the selector 33 | and, add reward to the loss and optimize the select parameters 34 | for name, param in self.model.named_parameters(): 35 | print (f'{name}: {param.requires_grad}') 36 | ''' 37 | # 38 | 39 | self.optimizer_tagger = optimizer_tagger 40 | self.optimizer_policy = optimizer_policy 41 | self.epoch = 0 42 | self.partial = partial 43 | 44 | def train(self, dataset, epoch): 45 | """""" 46 | self.tagger_model.train() 47 | # self.optimizer_tagger.zero_grad() 48 | 49 | self.epoch = epoch 50 | total_loss = 0.0 51 | 52 | cnt = 0 53 | exist_num_in_batch = 0 # instance num in this batch(expert + select_pa_sample) 54 | PA_num_in_batch = 0 # select_pa_sample_num in this sample (number of PAs) 55 | y_label_in_batch = [] # all_pa_data action (0/1) 56 | PA_sentense_representation = [] # representation of every PA instance 57 | X_char_batch = [] 58 | y_batch = [] 59 | # sign_batch=[] 60 | s_length_batch = [] 61 | y_one_hot_batch = [] 62 | 63 | # not update 64 | total_PA_num = 0 65 | X_char_all = [] 66 | y_all = [] 67 | # sign_all=[] 68 | s_length_all = [] 69 | y_one_hot_all = [] 70 | 71 | indices = torch.randperm(len(dataset)) 72 | 73 | for start_index in tqdm(range(len(dataset)), desc='Training epoch ' + str(self.epoch) + ''): 74 | 75 | sent, tags, tags_iobes, sign, s_length, y_one_hot, y_iobes_one_hot = dataset[indices[start_index]] 76 | 77 | if self.args.iobes: 78 | tags = tags_iobes 79 | y_one_hot = y_iobes_one_hot 80 | del y_iobes_one_hot, tags_iobes 81 | else: 82 | del y_iobes_one_hot, tags_iobes 83 | 84 | 85 | if exist_num_in_batch == self.args.batch_size: # if the number of the one that selected + experts== batch_size 86 | X_char_all.extend(X_char_batch) 87 | y_all.extend(y_batch) 88 | s_length_all.extend(s_length_batch) 89 | # sign_all.extend(sign_batch) 90 | y_one_hot_all.extend(y_one_hot_batch) 91 | cnt += 1 92 | ''' 93 | optimize the selector: 94 | 1. count reward: add all p(y|x) of dev_dataset and average 95 | 2. input1: average_reward 96 | 3. input2: all PA_sample in this step(0 or 1) 97 | ''' 98 | if len(y_label_in_batch) > 0: 99 | # calculate reward as r=1/(|A_i| +|H_i|) *(sum(log p(z|x)) + sum(log p(y|x)) just for EXperts and PA that selector choose 100 | reward = self.get_reward(X_char_batch, s_length_batch,y_batch, y_one_hot_batch) 101 | reward_list = [reward for i in range(len(y_label_in_batch))] 102 | # how to model state : s_i: PA_sentense_representation, s_(i-1): ? 103 | self.optimize_selector(reward_list) 104 | 105 | total_PA_num += PA_num_in_batch 106 | exist_num_in_batch = 0 107 | PA_num_in_batch = 0 108 | y_label_in_batch = [] 109 | PA_sentense_representation = [] 110 | X_char_batch = [] 111 | y_batch = [] 112 | sign_batch = [] 113 | s_length_batch = [] 114 | y_one_hot_batch = [] 115 | 116 | if sign == 0: # if it is the expert instance 117 | exist_num_in_batch += 1 118 | X_char_batch.append(sent) 119 | y_batch.append(tags) 120 | # sign_batch.append(sign) 121 | s_length_batch.append(s_length) 122 | y_one_hot_batch.append(y_one_hot) 123 | 124 | elif sign == 1: # the PA instance 125 | this_representation = self.get_representation(sent, tags, s_length) 126 | PA_sentense_representation.append(this_representation) 127 | action_point = self.select_action( 128 | this_representation) # Get the probablity fro selector for the sentence 129 | if action_point > 0.5: 130 | X_char_batch.append(sent) 131 | y_batch.append(tags) 132 | # sign_batch.append(sign) 133 | s_length_batch.append(s_length) 134 | y_one_hot_batch.append(y_one_hot) 135 | PA_num_in_batch += 1 136 | exist_num_in_batch += 1 137 | y_label_in_batch.append(1) 138 | else: 139 | y_label_in_batch.append(0) 140 | 141 | if exist_num_in_batch <= self.args.batch_size and exist_num_in_batch > 0: 142 | cnt += 1 143 | left_size = self.args.batch_size - exist_num_in_batch 144 | for i in range(left_size): 145 | index = np.random.randint(len(dataset)) 146 | sent, tags, tags_iobes, sign, s_length, y_one_hot, y_one_hot_iobes = dataset[index] 147 | if self.args.iobes: 148 | tags = tags_iobes 149 | y_one_hot=y_one_hot_iobes 150 | X_char_batch.append(sent) 151 | y_batch.append(tags) 152 | sign_batch.append(sign) 153 | s_length_batch.append(s_length) 154 | y_one_hot_batch.append(y_one_hot) 155 | X_char_all.extend(X_char_batch) 156 | y_all.extend(y_batch) 157 | # sign_all.extend(sign_batch) 158 | s_length_all.extend(s_length_batch) 159 | y_one_hot_all.extend(y_one_hot_batch) 160 | 161 | if len(y_label_in_batch) > 0: 162 | reward = self.get_reward(X_char_batch, s_length_batch, y_batch, y_one_hot_batch) 163 | reward_list = [reward for i in range(len(y_label_in_batch))] 164 | # just for PA (0,1) 165 | self.optimize_selector(reward_list) 166 | 167 | 168 | # optimize baseline 169 | num_iterations = int(math.ceil(1.0 * len(X_char_all) / self.args.batch_size)) 170 | total_loss = 0 171 | 172 | for iteration in tqdm(range(num_iterations), desc='Tagger optimizing epoch ' + str(self.epoch) + ''): 173 | self.tagger_model.train() 174 | self.optimizer_tagger.zero_grad() 175 | X_char_train_batch, s_length_batch, y_one_hot_batch = nextBatch(X_char_all, s_length_all, y_one_hot_all, 176 | start_index=iteration * self.args.batch_size, 177 | batch_size=self.args.batch_size) 178 | 179 | X_char_train_batch = torch.stack(X_char_train_batch) 180 | #y_train_batch = torch.stack(y_train_batch) 181 | s_length_batch = torch.stack(s_length_batch) 182 | y_one_hot_batch = torch.stack(y_one_hot_batch) 183 | 184 | batch_loss = self.tagger_model(X_char_train_batch, s_length_batch, y_one_hot_batch) 185 | 186 | total_loss += float(batch_loss) 187 | # retain_graph=True 188 | batch_loss.backward() 189 | self.optimizer_tagger.step() 190 | 191 | total_loss = float(total_loss / num_iterations) 192 | cnt += 1 193 | print("epoch %d iteration %d end, train_PA loss: %.4f, total_PA_num: %5d" % ( 194 | epoch, cnt, total_loss, total_PA_num)) 195 | # Decay learning rate every epoch 196 | return total_loss 197 | 198 | def get_reward(self, x_words, lengths,y_tags, y_tags_one_hot,F1_previous=0): 199 | self.tagger_model.eval() 200 | with torch.no_grad(): 201 | x_words = torch.stack(x_words) 202 | lengths = torch.stack(lengths) 203 | #y_tags=torch.stack(y_tags) 204 | y_tags_one_hot = torch.stack(y_tags_one_hot) 205 | batch_loss = self.tagger_model(x_words, lengths, y_tags_one_hot) 206 | reward = -1 * (batch_loss / self.args.batch_size) 207 | # pr, recall, f1 208 | #preds, w_lengths, tmaps, word_sort_ind= self.tagger_model.forward_sl(x_words, lengths, y_tags) 209 | #actual_tags_2_label, pred_2_label=tags_to_labels(y_tags, preds, self.tagger_mdl.tags_vocab, 210 | # self.args.iobes) 211 | #prec, rec, f1 = evaluate(actual_tags_2_label, actual_tags_2_label, verbose=False) 212 | 213 | return reward 214 | 215 | def select_action(self,state): 216 | probs = self.policy(state) 217 | m = Categorical(probs) 218 | action = m.sample() 219 | self.policy.saved_log_probs.append(m.log_prob(action)) 220 | return action.item() 221 | 222 | 223 | 224 | def optimize_selector(self,rewards): 225 | eps = np.finfo(np.float32).eps.item() 226 | R = 0 227 | policy_loss = [] 228 | returns = [] 229 | for r in rewards: 230 | R = r + self.args.gamma * R 231 | returns.insert(0, R) 232 | returns = torch.tensor(returns) 233 | returns = (returns - returns.mean()) / (returns.std() + eps) 234 | for log_prob, R in zip(self.policy.saved_log_probs, returns): 235 | policy_loss.append(-log_prob * R) 236 | self.optimizer_policy.zero_grad() 237 | policy_loss = torch.cat(policy_loss).sum() 238 | policy_loss.backward() 239 | self.optimizer_policy.step() 240 | del self.policy.saved_log_probs[:] 241 | 242 | def get_representation(self, X_char, y_char, length): 243 | # concat sample_representation and tag_representation 244 | # Get representation from BiLSTM for the current sentence 245 | with torch.no_grad(): 246 | X_char = X_char.to(device) 247 | w = self.tagger_model.embeddings(X_char).unsqueeze(0) 248 | w = self.tagger_model.dropout(w) 249 | 250 | # Pack padded sequence 251 | w = torch.nn.utils.rnn.pack_padded_sequence(w, list([self.args.max_len]), 252 | batch_first=True) 253 | # lstm 254 | output, (h, cell) = self.tagger_model.BiLSTM( 255 | w) # packed sequence of word_rnn_dim, with real sequence lengths 256 | 257 | # Unpack packed sequence 258 | output, _ = torch.nn.utils.rnn.pad_packed_sequence(output, 259 | batch_first=True) # (batch_size, max_word_len_in_batch, word_rnn_dim) 260 | 261 | output = self.tagger_model.dropout(output) 262 | 263 | w_last_node = output[:, length - 1, :] 264 | 265 | this_representation_o_t = self.tagger_model.crf_layer.hidden2tag(output) 266 | 267 | # get the lable score ( if the label is unk get averge of all label scores 268 | y_char = y_char % self.tagset_size 269 | tag_scores = [] 270 | # @ todo cuda 271 | for i, y in enumerate(y_char): 272 | if y == self.o_tag and self.partial == True: 273 | tag_scores.append(torch.mean(this_representation_o_t[:, i, :])) 274 | else: 275 | tag_scores.append(this_representation_o_t[:, i, y].squeeze(0)) 276 | tag_scores = torch.stack(tag_scores).unsqueeze(0) 277 | rep = torch.cat([w_last_node, tag_scores], dim=-1) 278 | return rep 279 | 280 | def test(self, val_loader): 281 | """""" 282 | self.tagger_model.eval() 283 | total_loss = 0 284 | predictions = [] 285 | sents_decoded = [] 286 | actual_tags = [] 287 | 288 | for i, (sents, tags, tags_iobes, signs, s_lengths, _,_) in enumerate(val_loader): 289 | max_word_len = max(s_lengths.tolist()) 290 | 291 | if self.args.iobes: 292 | tags = tags_iobes 293 | 294 | 295 | # Reduce batch's padded length to maximum in-batch sequence 296 | # This saves some compute on nn.Linear layers (RNNs are unaffected, since they don't compute over the pads) 297 | sents = sents[:, :max_word_len] 298 | tags = tags[:, :max_word_len] 299 | s_lengths = s_lengths.to(device) 300 | loss, decoded, w_lengths, tags_sorted = self.tagger_model.forward_eval(sents, s_lengths,tags) 301 | 302 | decoded = decoded.transpose(1, 0) 303 | decoded_sorted = [decoded[:length-1] for decoded, length in zip(decoded, w_lengths)] 304 | tags_sorted = [tag[:length-1] for tag, length in zip(tags_sorted, w_lengths)] 305 | #sents_sorted = [sent[:length-1] for sent, length in zip(sents, w_lengths)] 306 | #sents_decoded.extend(sents_sorted) 307 | predictions.extend(decoded_sorted) 308 | 309 | total_loss += float(loss) 310 | actual_tags.extend(tags_sorted) 311 | 312 | total_loss = float(total_loss / len(val_loader)) 313 | 314 | return total_loss, predictions, actual_tags 315 | -------------------------------------------------------------------------------- /src/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nooralahzadeh/DSNER-pytorch/a4d129b5ceb562a7d45f0a72dda504137e7caeee/src/__init__.py -------------------------------------------------------------------------------- /src/conlleval.py: -------------------------------------------------------------------------------- 1 | """ 2 | This script applies to IOB2 or IOBES tagging scheme. 3 | If you are using a different scheme, please convert to IOB2 or IOBES. 4 | 5 | IOB2: 6 | - B = begin, 7 | - I = inside but not the first, 8 | - O = outside 9 | 10 | e.g. 11 | John lives in New York City . 12 | B-PER O O B-LOC I-LOC I-LOC O 13 | 14 | IOBES: 15 | - B = begin, 16 | - E = end, 17 | - S = singleton, 18 | - I = inside but not the first or the last, 19 | - O = outside 20 | 21 | e.g. 22 | John lives in New York City . 23 | S-PER O O B-LOC I-LOC E-LOC O 24 | 25 | prefix: IOBES 26 | chunk_type: PER, LOC, etc. 27 | """ 28 | from __future__ import division, print_function, unicode_literals 29 | 30 | import sys 31 | from collections import defaultdict 32 | from utils import iobes_iob 33 | 34 | 35 | def split_tag(chunk_tag): 36 | """ 37 | split chunk tag into IOBES prefix and chunk_type 38 | e.g. 39 | B-PER -> (B, PER) 40 | O -> (O, None) 41 | """ 42 | if chunk_tag == 'O': 43 | return ('O', None) 44 | return chunk_tag.split('-', maxsplit=1) 45 | 46 | 47 | def is_chunk_end(prev_tag, tag): 48 | """ 49 | check if the previous chunk ended between the previous and current word 50 | e.g. 51 | (B-PER, I-PER) -> False 52 | (B-LOC, O) -> True 53 | 54 | Note: in case of contradicting tags, e.g. (B-PER, I-LOC) 55 | this is considered as (B-PER, B-LOC) 56 | """ 57 | prefix1, chunk_type1 = split_tag(prev_tag) 58 | prefix2, chunk_type2 = split_tag(tag) 59 | 60 | if prefix1 == 'O': 61 | return False 62 | if prefix2 == 'O': 63 | return prefix1 != 'O' 64 | 65 | if chunk_type1 != chunk_type2: 66 | return True 67 | 68 | return prefix2 in ['B', 'S'] or prefix1 in ['E', 'S'] 69 | 70 | 71 | def is_chunk_start(prev_tag, tag): 72 | """ 73 | check if a new chunk started between the previous and current word 74 | """ 75 | prefix1, chunk_type1 = split_tag(prev_tag) 76 | prefix2, chunk_type2 = split_tag(tag) 77 | 78 | if prefix2 == 'O': 79 | return False 80 | if prefix1 == 'O': 81 | return prefix2 != 'O' 82 | 83 | if chunk_type1 != chunk_type2: 84 | return True 85 | 86 | return prefix2 in ['B', 'S'] or prefix1 in ['E', 'S'] 87 | 88 | 89 | def calc_metrics(tp, p, t, percent=True): 90 | """ 91 | compute overall precision, recall and FB1 (default values are 0.0) 92 | if percent is True, return 100 * original decimal value 93 | """ 94 | precision = tp / p if p else 0 95 | recall = tp / t if t else 0 96 | fb1 = 2 * precision * recall / (precision + recall) if precision + recall else 0 97 | if percent: 98 | return 100 * precision, 100 * recall, 100 * fb1 99 | else: 100 | return precision, recall, fb1 101 | 102 | 103 | def count_chunks(true_seqs, pred_seqs): 104 | """ 105 | true_seqs: a list of true tags 106 | pred_seqs: a list of predicted tags 107 | 108 | return: 109 | correct_chunks: a dict (counter), 110 | key = chunk types, 111 | value = number of correctly identified chunks per type 112 | true_chunks: a dict, number of true chunks per type 113 | pred_chunks: a dict, number of identified chunks per type 114 | 115 | correct_counts, true_counts, pred_counts: similar to above, but for tags 116 | """ 117 | correct_chunks = defaultdict(int) 118 | true_chunks = defaultdict(int) 119 | pred_chunks = defaultdict(int) 120 | 121 | correct_counts = defaultdict(int) 122 | true_counts = defaultdict(int) 123 | pred_counts = defaultdict(int) 124 | 125 | prev_true_tag, prev_pred_tag = 'O', 'O' 126 | correct_chunk = None 127 | 128 | for true_tag, pred_tag in zip(true_seqs, pred_seqs): 129 | if true_tag == pred_tag: 130 | correct_counts[true_tag] += 1 131 | true_counts[true_tag] += 1 132 | pred_counts[pred_tag] += 1 133 | 134 | _, true_type = split_tag(true_tag) 135 | _, pred_type = split_tag(pred_tag) 136 | 137 | if correct_chunk is not None: 138 | true_end = is_chunk_end(prev_true_tag, true_tag) 139 | pred_end = is_chunk_end(prev_pred_tag, pred_tag) 140 | 141 | if pred_end and true_end: 142 | correct_chunks[correct_chunk] += 1 143 | correct_chunk = None 144 | elif pred_end != true_end or true_type != pred_type: 145 | correct_chunk = None 146 | 147 | true_start = is_chunk_start(prev_true_tag, true_tag) 148 | pred_start = is_chunk_start(prev_pred_tag, pred_tag) 149 | 150 | if true_start and pred_start and true_type == pred_type: 151 | correct_chunk = true_type 152 | if true_start: 153 | true_chunks[true_type] += 1 154 | if pred_start: 155 | pred_chunks[pred_type] += 1 156 | 157 | prev_true_tag, prev_pred_tag = true_tag, pred_tag 158 | if correct_chunk is not None: 159 | correct_chunks[correct_chunk] += 1 160 | 161 | return (correct_chunks, true_chunks, pred_chunks, 162 | correct_counts, true_counts, pred_counts) 163 | 164 | 165 | def get_result(correct_chunks, true_chunks, pred_chunks, 166 | correct_counts, true_counts, pred_counts, verbose=True): 167 | """ 168 | if verbose, print overall performance, as well as preformance per chunk type; 169 | otherwise, simply return overall prec, rec, f1 scores 170 | """ 171 | # sum counts 172 | sum_correct_chunks = sum(correct_chunks.values()) 173 | sum_true_chunks = sum(true_chunks.values()) 174 | sum_pred_chunks = sum(pred_chunks.values()) 175 | 176 | sum_correct_counts = sum(correct_counts.values()) 177 | sum_true_counts = sum(true_counts.values()) 178 | 179 | nonO_correct_counts = sum(v for k, v in correct_counts.items() if k != 'O') 180 | nonO_true_counts = sum(v for k, v in true_counts.items() if k != 'O') 181 | 182 | chunk_types = sorted(list(set(list(true_chunks) + list(pred_chunks)))) 183 | 184 | # compute overall precision, recall and FB1 (default values are 0.0) 185 | prec, rec, f1 = calc_metrics(sum_correct_chunks, sum_pred_chunks, sum_true_chunks) 186 | res = (prec, rec, f1) 187 | if not verbose: 188 | return res 189 | 190 | # print overall performance, and performance per chunk type 191 | 192 | print("processed %i tokens with %i phrases; " % (sum_true_counts, sum_true_chunks), end='') 193 | print("found: %i phrases; correct: %i.\n" % (sum_pred_chunks, sum_correct_chunks), end='') 194 | 195 | print("accuracy: %6.2f%%; (non-O)" % (100 * nonO_correct_counts / nonO_true_counts)) 196 | print("accuracy: %6.2f%%; " % (100 * sum_correct_counts / sum_true_counts), end='') 197 | print("precision: %6.2f%%; recall: %6.2f%%; FB1: %6.2f" % (prec, rec, f1)) 198 | 199 | # for each chunk type, compute precision, recall and FB1 (default values are 0.0) 200 | for t in chunk_types: 201 | prec, rec, f1 = calc_metrics(correct_chunks[t], pred_chunks[t], true_chunks[t]) 202 | print("%17s: " % t, end='') 203 | print("precision: %6.2f%%; recall: %6.2f%%; FB1: %6.2f" % 204 | (prec, rec, f1), end='') 205 | print(" %d" % pred_chunks[t]) 206 | 207 | return res 208 | # you can generate LaTeX output for tables like in 209 | # http://cnts.uia.ac.be/conll2003/ner/example.tex 210 | # but I'm not implementing this 211 | 212 | 213 | def evaluate(true_seqs, pred_seqs, verbose=True): 214 | (correct_chunks, true_chunks, pred_chunks, 215 | correct_counts, true_counts, pred_counts) = count_chunks(true_seqs, pred_seqs) 216 | result = get_result(correct_chunks, true_chunks, pred_chunks, 217 | correct_counts, true_counts, pred_counts, verbose=verbose) 218 | return result 219 | 220 | 221 | def evaluate_conll_file(fileIterator): 222 | true_seqs, pred_seqs = [], [] 223 | 224 | for line in fileIterator: 225 | cols = line.strip().split() 226 | # each non-empty line must contain >= 3 columns 227 | if not cols: 228 | true_seqs.append('O') 229 | pred_seqs.append('O') 230 | elif len(cols) < 3: 231 | raise IOError("conlleval: too few columns in line %s\n" % line) 232 | else: 233 | # extract tags from last 2 columns 234 | true_seqs.append(cols[-2]) 235 | pred_seqs.append(cols[-1]) 236 | return evaluate(true_seqs, pred_seqs) 237 | 238 | 239 | if __name__ == '__main__': 240 | """ 241 | usage: conlleval < file 242 | """ 243 | evaluate_conll_file(sys.stdin) 244 | 245 | 246 | def tags_to_labels(y_reals,y_preds,id_to_tag,iobes): 247 | y_prds=[] 248 | y_rels=[] 249 | for y_real, y_pred in zip(y_reals, y_preds): 250 | try: 251 | assert len(y_pred) == len(y_real) 252 | except: 253 | print (y_real, y_pred) 254 | 255 | p_tags = [id_to_tag[y] for y in y_pred] 256 | r_tags = [id_to_tag[y] for y in y_real] 257 | 258 | if iobes: 259 | p_tags=iobes_iob(p_tags) 260 | r_tags=iobes_iob(r_tags) 261 | 262 | y_prds.extend(p_tags) 263 | y_rels.extend(r_tags) 264 | y_prds.extend(['O']) 265 | y_rels.extend(['O']) 266 | 267 | return y_rels, y_prds -------------------------------------------------------------------------------- /src/constants.py: -------------------------------------------------------------------------------- 1 | """ 2 | Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"). 5 | You may not use this file except in compliance with the License. 6 | A copy of the License is located at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | or in the "license" file accompanying this file. This file is distributed 11 | on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | express or implied. See the License for the specific language governing 13 | permissions and limitations under the License. 14 | """ 15 | 16 | PAD = 0 17 | UNK = 1 18 | BOS = 2 19 | EOS = 3 20 | 21 | PAD_WORD = '' 22 | UNK_WORD = '' 23 | BOS_WORD = '' 24 | EOS_WORD = '' 25 | # 26 | -------------------------------------------------------------------------------- /src/crf_LightNER.py: -------------------------------------------------------------------------------- 1 | """ 2 | from :https://github.com/LiyuanLucasLiu/LightNER 3 | .. module:: crf 4 | :synopsis: conditional random field 5 | 6 | .. moduleauthor:: Liyuan Liu 7 | """ 8 | 9 | import torch 10 | import torch.nn as nn 11 | import numpy as np 12 | 13 | class CRF_L(nn.Module): 14 | """ 15 | Conditional Random Field Module 16 | Parameters 17 | ---------- 18 | hidden_dim : ``int``, required. 19 | the dimension of the input features. 20 | tagset_size : ``int``, required. 21 | the size of the target labels. 22 | if_bias: ``bool``, optional, (default=True). 23 | whether the linear transformation has the bias term. 24 | """ 25 | def __init__(self, 26 | hidden_dim: int, 27 | tagset_size: int, 28 | if_bias: bool = True): 29 | super(CRF_L, self).__init__() 30 | self.tagset_size = tagset_size 31 | self.hidden2tag = nn.Linear(hidden_dim, self.tagset_size, bias=if_bias) 32 | self.transitions = nn.Parameter(torch.Tensor(self.tagset_size, self.tagset_size)) 33 | 34 | def rand_init(self): 35 | """ 36 | random initialization 37 | """ 38 | init_linear(self.hidden2tag) 39 | self.transitions.data.zero_() 40 | 41 | def forward(self, feats): 42 | """ 43 | calculate the potential score for the conditional random field. 44 | Parameters 45 | ---------- 46 | feats: ``torch.FloatTensor``, required. 47 | the input features for the conditional random field, of shape (*, hidden_dim). 48 | Returns 49 | ------- 50 | output: ``torch.FloatTensor``. 51 | A float tensor of shape (ins_num, from_tag_size, to_tag_size) 52 | """ 53 | 54 | tmp = feats.size() 55 | batch_size = tmp[0] 56 | seq_len = tmp[1] 57 | scores = self.hidden2tag(feats).view(-1, 1, self.tagset_size) 58 | ins_num = scores.size(0) 59 | crf_scores = scores.expand(ins_num, self.tagset_size, self.tagset_size) + self.transitions.view(1, self.tagset_size, self.tagset_size).expand(ins_num, self.tagset_size, self.tagset_size) 60 | 61 | return crf_scores.view(-1,seq_len,self.tagset_size,self.tagset_size) 62 | 63 | 64 | class CRFLoss_vb(nn.Module): 65 | """loss for viterbi decode 66 | 67 | .. math:: 68 | \sum_{j=1}^n \log (\phi(\hat{y}_{j-1}, \hat{y}_j, \mathbf{z}_j)) - \log (\sum_{\mathbf{y}' \in \mathbf{Y}(\mathbf{Z})} \prod_{j=1}^n \phi(y'_{j-1}, y'_j, \mathbf{z}_j) ) 69 | 70 | args: 71 | tagset_size: target_set_size 72 | start_tag: ind for 73 | end_tag: ind for 74 | average_batch: whether average the loss among batch 75 | 76 | """ 77 | 78 | def __init__(self, tagset_size, start_tag, end_tag, average_batch=False): 79 | super(CRFLoss_vb, self).__init__() 80 | self.tagset_size = tagset_size 81 | self.start_tag = start_tag 82 | self.end_tag = end_tag 83 | self.average_batch = average_batch 84 | 85 | def forward(self, scores, target, mask): 86 | """ 87 | args: 88 | scores (seq_len, bat_size, target_size_from, target_size_to) : crf scores 89 | target (seq_len, bat_size, 1) : golden state 90 | mask (size seq_len, bat_size) : mask for padding 91 | return: 92 | loss 93 | """ 94 | 95 | if torch.cuda.is_available(): 96 | scores = scores.transpose(1, 0).cuda() 97 | target = target.transpose(1, 0).unsqueeze(2).cuda() 98 | mask = mask.byte().transpose(1, 0).cuda() 99 | else: 100 | scores = scores.transpose(1, 0) 101 | target = target.transpose(1, 0).contiguous().unsqueeze(2) 102 | mask= mask.byte().transpose(1, 0).contiguous() 103 | 104 | # calculate batch size and seq len 105 | seq_len = scores.size(0) 106 | bat_size = scores.size(1) 107 | 108 | # calculate sentence score 109 | tg_energy = torch.gather(scores.view(seq_len, bat_size, -1), 2, target).view(seq_len, bat_size) # seq_len * bat_size 110 | tg_energy = tg_energy.masked_select(mask).sum() 111 | 112 | # calculate forward partition score 113 | 114 | # build iter 115 | seq_iter = enumerate(scores) 116 | # the first score should start with 117 | _, inivalues = seq_iter.__next__() # bat_size * from_target_size * to_target_size 118 | # only need start from start_tag 119 | partition = inivalues[:, self.start_tag, :].clone() # bat_size * to_target_size 120 | # iter over last scores 121 | for idx, cur_values in seq_iter: 122 | # previous to_target is current from_target 123 | # partition: previous results log(exp(from_target)), #(batch_size * from_target) 124 | # cur_values: bat_size * from_target * to_target 125 | cur_values = cur_values + partition.contiguous().view(bat_size, self.tagset_size, 1).expand(bat_size, self.tagset_size, self.tagset_size) 126 | cur_partition = log_sum_exp(cur_values, self.tagset_size) 127 | # (bat_size * from_target * to_target) -> (bat_size * to_target) 128 | # partition = utils.switch(partition, cur_partition, mask[idx].view(bat_size, 1).expand(bat_size, self.tagset_size)).view(bat_size, -1) 129 | mask_idx = mask[idx, :].view(bat_size, 1).expand(bat_size, self.tagset_size) 130 | partition.masked_scatter_(mask_idx, cur_partition.masked_select(mask_idx)) #0 for partition, 1 for cur_partition 131 | 132 | #only need end at end_tag 133 | partition = partition[:, self.end_tag].sum() 134 | # average = mask.sum() 135 | # average_batch 136 | if self.average_batch: 137 | loss = (partition - tg_energy) / bat_size 138 | else: 139 | loss = (partition - tg_energy) 140 | 141 | return loss 142 | 143 | class CRFDecode_vb(): 144 | """Batch-mode viterbi decode 145 | 146 | args: 147 | tagset_size: target_set_size 148 | start_tag: ind for 149 | end_tag: ind for 150 | average_batch: whether average the loss among batch 151 | 152 | """ 153 | 154 | def __init__(self, tagset_size, start_tag, end_tag, average_batch=True): 155 | self.tagset_size = tagset_size 156 | self.start_tag = start_tag 157 | self.end_tag = end_tag 158 | self.average_batch = average_batch 159 | 160 | def decode(self, scores, mask): 161 | """Find the optimal path with viterbe decode 162 | 163 | args: 164 | scores (size seq_len, bat_size, target_size_from, target_size_to) : crf scores 165 | mask (seq_len, bat_size) : mask for padding 166 | return: 167 | decoded sequence (size seq_len, bat_size) 168 | """ 169 | # calculate batch size and seq len 170 | 171 | if torch.cuda.is_available(): 172 | scores = scores.transpose(1, 0).cuda() 173 | mask = mask.byte().transpose(1, 0).cuda() 174 | else: 175 | scores = scores.transpose(1, 0) 176 | mask= mask.byte().transpose(1, 0).contiguous() 177 | 178 | seq_len = scores.size(0) 179 | bat_size = scores.size(1) 180 | 181 | mask = 1 - mask 182 | decode_idx = torch.LongTensor(seq_len-1, bat_size) 183 | 184 | # calculate forward score and checkpoint 185 | 186 | # build iter 187 | seq_iter = enumerate(scores) 188 | # the first score should start with 189 | _, inivalues = seq_iter.__next__() # bat_size * from_target_size * to_target_size 190 | # only need start from start_tag 191 | forscores = inivalues[:, self.start_tag, :] # bat_size * to_target_size 192 | back_points = list() 193 | # iter over last scores 194 | for idx, cur_values in seq_iter: 195 | # previous to_target is current from_target 196 | # partition: previous results log(exp(from_target)), #(batch_size * from_target) 197 | # cur_values: bat_size * from_target * to_target 198 | cur_values = cur_values + forscores.contiguous().view(bat_size, self.tagset_size, 1).expand(bat_size, self.tagset_size, self.tagset_size) 199 | 200 | forscores, cur_bp = torch.max(cur_values, 1) 201 | cur_bp.masked_fill_(mask[idx].view(bat_size, 1).expand(bat_size, self.tagset_size), self.end_tag) 202 | back_points.append(cur_bp) 203 | 204 | pointer = back_points[-1][:, self.end_tag] 205 | decode_idx[-1] = pointer 206 | for idx in range(len(back_points)-2, -1, -1): 207 | back_point = back_points[idx] 208 | index = pointer.contiguous().view(-1,1) 209 | pointer = torch.gather(back_point, 1, index).view(-1) 210 | decode_idx[idx] = pointer 211 | return decode_idx 212 | 213 | def log_sum_exp(vec, m_size): 214 | """ 215 | calculate log of exp sum 216 | args: 217 | vec (batch_size, vanishing_dim, hidden_dim) : input tensor 218 | m_size : hidden_dim 219 | return: 220 | batch_size, hidden_dim 221 | """ 222 | _, idx = torch.max(vec, 1) # B * 1 * M 223 | max_score = torch.gather(vec, 1, idx.view(-1, 1, m_size)).view(-1, 1, m_size) # B * M 224 | 225 | return max_score.view(-1, m_size) + torch.log(torch.sum(torch.exp(vec - max_score.expand_as(vec)), 1)).view(-1, m_size) # B * M 226 | 227 | 228 | class CRFLoss_vb_PA(nn.Module): 229 | """loss for viterbi decode 230 | .. math:: 231 | \sum_{j=1}^n \log (\phi(\hat{y}_{j-1}, \hat{y}_j, \mathbf{z}_j)) - \log (\sum_{\mathbf{y}' \in \mathbf{Y}(\mathbf{Z})} \prod_{j=1}^n \phi(y'_{j-1}, y'_j, \mathbf{z}_j) ) 232 | args: 233 | tagset_size: target_set_size 234 | start_tag: ind for 235 | end_tag: ind for 236 | average_batch: whether average the loss among batch 237 | 238 | """ 239 | 240 | def __init__(self, tagset_size, start_tag, end_tag, average_batch=False): 241 | super(CRFLoss_vb_PA, self).__init__() 242 | self.tagset_size = tagset_size 243 | self.start_tag = start_tag 244 | self.end_tag = end_tag 245 | self.average_batch = average_batch 246 | self.NINF=-100000 247 | 248 | def forward(self, scores, target, mask): 249 | """ 250 | args: 251 | scores (seq_len, bat_size, target_size_from, target_size_to) : crf scores 252 | target (seq_len, bat_size, 1) : golden state 253 | mask (size seq_len, bat_size) : mask for padding 254 | return: 255 | loss 256 | """ 257 | 258 | if torch.cuda.is_available(): 259 | scores = scores.transpose(1, 0).cuda() 260 | target = target.transpose(1, 0).cuda() 261 | mask = mask.byte().transpose(1, 0).cuda() 262 | else: 263 | scores = scores.transpose(1, 0) 264 | target = target.transpose(1, 0).contiguous() 265 | mask= mask.byte().transpose(1, 0).contiguous() 266 | 267 | 268 | # calculate batch size and seq len 269 | seq_len = scores.size(0) 270 | bat_size = scores.size(1) 271 | 272 | # build iter 273 | seq_iter = enumerate(scores) 274 | # the first score should start with 275 | _, inivalues = seq_iter.__next__() # bat_size * from_target_size * to_target_size 276 | # only need start from start_tag 277 | partition = inivalues[:, self.start_tag, :].clone() # bat_size * to_target_size 278 | tag_partition = inivalues[:, self.start_tag, :].clone().masked_fill_(target[0],self.NINF) 279 | 280 | # iter over last scores 281 | for idx, cur_values in seq_iter: 282 | # previous to_target is current from_target 283 | # partition: previous results log(exp(from_target)), #(batch_size * from_target) 284 | # cur_values: bat_size * from_target * to_target 285 | 286 | cur_tag_values = cur_values + tag_partition.contiguous().view(bat_size, self.tagset_size, 1).expand( 287 | bat_size, self.tagset_size, self.tagset_size) 288 | cur_tag_partition = log_sum_exp(cur_tag_values, self.tagset_size).masked_fill_(target[idx],self.NINF) 289 | cur_values = cur_values + partition.contiguous().view(bat_size, self.tagset_size, 1).expand(bat_size, 290 | self.tagset_size, 291 | self.tagset_size) 292 | cur_partition = log_sum_exp(cur_values, self.tagset_size) 293 | # (bat_size * from_target * to_target) -> (bat_size * to_target) 294 | mask_idx = mask[idx, :].view(bat_size, 1).expand(bat_size, self.tagset_size) 295 | tag_partition.masked_scatter_(mask_idx, cur_tag_partition.masked_select(mask_idx)) 296 | partition.masked_scatter_(mask_idx, cur_partition.masked_select(mask_idx)) 297 | # partition = new_partition 298 | 299 | # only need end at end_tag 300 | tag_partition = tag_partition[:, self.end_tag] 301 | tp_mask = (tag_partition == self.NINF) 302 | # target = tag_partition.masked_select(tp_mask).sum() 303 | target = tag_partition.masked_fill_(tp_mask, 0).sum() 304 | partition = partition[:, self.end_tag].sum() 305 | # average = mask.sum() 306 | 307 | # average_batch 308 | if self.average_batch: 309 | loss = (partition - target) / bat_size 310 | else: 311 | loss = (partition - target) 312 | 313 | return loss 314 | 315 | 316 | def init_linear(input_linear): 317 | """ 318 | Initialize linear transformation 319 | """ 320 | bias = np.sqrt(6.0 / (input_linear.weight.size(0) + input_linear.weight.size(1))) 321 | nn.init.uniform_(input_linear.weight, -bias, bias) 322 | if input_linear.bias is not None: 323 | input_linear.bias.data.zero_() -------------------------------------------------------------------------------- /src/dataset.py: -------------------------------------------------------------------------------- 1 | 2 | 3 | import os, random 4 | from tqdm import tqdm 5 | from copy import deepcopy 6 | 7 | import torch 8 | import torch.utils.data as data 9 | 10 | import constants as C 11 | 12 | device = torch.device("cuda" if torch.cuda.is_available() else "cpu") 13 | 14 | class EC_PA_Datset(data.Dataset): 15 | def __init__(self, path, word_vocab, tags_vocab, tags_iobes_vocab, partial=False, treetype="", cased=""): 16 | super(EC_PA_Datset, self).__init__() 17 | self.maxlen = 75 18 | self.word_vocab = word_vocab 19 | self.partial=partial 20 | self.sign= 1 if 'pa' in path else 0 21 | self.tags_vocab = tags_vocab 22 | self.tags_vocab_iobes= tags_iobes_vocab 23 | self.num_tags = {'iob':tags_vocab.size(),'iobes':tags_iobes_vocab.size()} 24 | self.sentences, self.signs, self.lengths = self.read_sentences(os.path.join(path, 'a%s%s.txt' % (treetype,cased))) 25 | self.tags, self.tags_one_hot = self.read_tags(os.path.join(path, 'tags%s.txt' % treetype)) 26 | self.size = len(self.tags) 27 | self.tags_iobes, self.tags_iobes_one_hot = self.read_tags(os.path.join(path, 'tags-iobes%s.txt' % treetype), 28 | iobes=True) 29 | 30 | def __len__(self): 31 | return self.size 32 | 33 | 34 | 35 | def split(self,indices): 36 | self.sentences=self.sentences[indices] 37 | self.signs=self.signs[indices] 38 | self.lengths=self.lengths[indices] 39 | self.tags=self.tags[indices] 40 | self.tags_iobes=self.tags_iobes[indices] 41 | self.tags_one_hot = self.tags_one_hot[indices] 42 | self.tags_iobes_one_hot = self.tags_iobes_one_hot[indices] 43 | self.size=len(self.tags) 44 | return self 45 | 46 | 47 | 48 | 49 | def add_item (self, sent, tags,tags_one_hot,tags_iobes_one_hots, length): 50 | self.sentences=torch.cat([self.sentences,sent.unsqueeze(0)], dim=0) 51 | self.tags=torch.cat([self.tags,tags.unsqueeze(0)], dim=0) 52 | self.tags_one_hot = torch.cat([self.tags_one_hot, tags_one_hot.unsqueeze(0)], dim=0) 53 | self.tags_iobes_one_hots = torch.cat([self.tags_iobes_one_hots, tags_iobes_one_hots.unsqueeze(0)], dim=0) 54 | self.lengths =torch.cat([self.lengths,length], dim=0) 55 | self.size=self.size+1 56 | 57 | return self 58 | 59 | def __getitem__(self, index): 60 | sent = deepcopy(self.sentences[index]) 61 | tags=deepcopy(self.tags[index]) 62 | tags_one_hot=deepcopy(self.tags_one_hot[index]) 63 | tags_iobes=deepcopy(self.tags_iobes[index]) 64 | tags_iobes_one_hots=deepcopy(self.tags_iobes_one_hot[index]) 65 | 66 | #lm_input=deepcopy(self.sentences_words_in_chars[index]) 67 | sign=deepcopy(self.signs[index]) 68 | s_length=deepcopy(self.lengths[index]) 69 | 70 | return sent, tags, tags_iobes, sign, s_length,tags_one_hot,tags_iobes_one_hots 71 | 72 | 73 | def read_sentences(self, filename): 74 | with open(filename, 'r') as f: 75 | sentences= [self.read_sentence(line) for line in tqdm(f.readlines())] 76 | 77 | signs=[self.sign for i in sentences] 78 | 79 | sentences = list( 80 | map(lambda s: list(map(lambda w: self.word_vocab.label_to_idx.get(w, self.word_vocab.label_to_idx[C.UNK_WORD]), s)), sentences)) 81 | 82 | #self.maxlen = max(list(map(lambda s: len(s), sentences))) 83 | # pad 84 | sentences_padded = [] 85 | lengths=[] 86 | for sentence in sentences: 87 | lengths.append(len(sentence)+1) 88 | sentences_padded.append(sentence + [self.word_vocab.label_to_idx[C.PAD_WORD]] * (self.maxlen - len(sentence))) 89 | return torch.LongTensor(sentences_padded), torch.LongTensor(signs), torch.LongTensor(lengths), 90 | 91 | def read_sentence(self, line): 92 | words=[w for w in line.rstrip('\n').split('\t')] 93 | return words 94 | 95 | def read_tags(self, filename, iobes=False): 96 | if iobes: 97 | tags_vocab=self.tags_vocab_iobes.label_to_idx 98 | else: 99 | tags_vocab = self.tags_vocab.label_to_idx 100 | with open(filename, 'r') as f: 101 | tags = [self.read_tag(line) for line in tqdm(f.readlines())] 102 | 103 | # Encode tags into tag maps with at the end 104 | tmaps = list(map(lambda s: [tags_vocab[C.BOS_WORD]]+list(map(lambda t: tags_vocab[t], s)) , tags)) 105 | 106 | # Since we're using CRF scores of size (prev_tags, cur_tags), find indices of target sequence in the unrolled scores 107 | # This will be row_index (i.e. prev_tag) * n_columns (i.e. tagset_size) + column_index (i.e. cur_tag) 108 | 109 | labels_for_encoding=[] 110 | UNK = tags_vocab['O'] 111 | possible_tags=[tags_vocab[t] for t in tags_vocab if t not in [C.PAD_WORD,C.BOS_WORD]] 112 | 113 | for tmap in tmaps: 114 | label=[] 115 | for t in tmap: 116 | if self.sign == 1 and self.partial and t== UNK: 117 | label.append(possible_tags) 118 | else: 119 | label.append([t]) 120 | labels_for_encoding.append(label) 121 | 122 | tag_pad_len = self.maxlen 123 | tmaps_one_hot = [] 124 | for label_for_encoding in labels_for_encoding: 125 | one_hot=self.label_encoding(label_for_encoding,len(tags_vocab),tags_vocab[C.PAD_WORD],self.maxlen) 126 | tmaps_one_hot.append(one_hot) 127 | 128 | tmaps = list( 129 | map(lambda s: [s[i] * len(tags_vocab) + s[i+1] for i in range(0, len(s)-1)]+[s[len(s)-1]* len(tags_vocab) +tags_vocab[C.PAD_WORD]], tmaps)) 130 | #+[s[len(s)]* len(tags_vocab) +tags_vocab[C.PAD_WORD]] 131 | # Sanity check 132 | 133 | padded_tmaps=[] 134 | for tmap in tmaps: 135 | padded_tmaps.append(tmap + [tags_vocab[C.PAD_WORD]] * (tag_pad_len - len(tmap))) 136 | 137 | return torch.LongTensor(padded_tmaps),torch.LongTensor(tmaps_one_hot) 138 | 139 | def read_tag(self, line): 140 | indices=[t for t in line.rstrip('\n').split('\t')] 141 | return indices 142 | 143 | def label_encoding(self,label, label_size, pad_label, tot_len): 144 | """ 145 | pad label for vtb decode format 146 | """ 147 | encoded_label = [[1] * label_size for ind in range(tot_len)] 148 | cur_len = len(label) - 1 149 | for ind in range(0, cur_len): 150 | for ind_label in label[ind + 1]: 151 | encoded_label[ind][ind_label] = 0 152 | for ind in range(cur_len, tot_len): 153 | encoded_label[ind][pad_label] = 0 154 | return encoded_label 155 | 156 | def merge(self, dataset): 157 | 158 | sentences_padded = [] 159 | for sentence in dataset.sentences.tolist(): 160 | sentences_padded.append( 161 | sentence + [self.word_vocab.label_to_idx[C.PAD_WORD]] * (self.maxlen - len(sentence))) 162 | 163 | sentences=torch.LongTensor(sentences_padded) 164 | self.sentences=torch.cat([self.sentences,sentences], dim=0) 165 | 166 | self.signs=torch.cat([self.signs,dataset.signs], dim=0) 167 | 168 | padded_tmaps=[] 169 | 170 | for tmap in dataset.tags.tolist(): 171 | padded_tmaps.append(tmap + [self.tags_vocab.label_to_idx[C.PAD_WORD]] * (self.maxlen - len(tmap))) 172 | 173 | tags = torch.LongTensor(padded_tmaps) 174 | self.tags=torch.cat([self.tags, tags], dim=0) 175 | 176 | padded_tmaps_one_hot = [] 177 | 178 | for tmap in dataset.tags_one_hot.tolist(): 179 | padded_tmaps_one_hot.append(tmap + [self.tags_vocab.label_to_idx[C.PAD_WORD]] * (self.maxlen - len(tmap))) 180 | 181 | tags = torch.LongTensor(padded_tmaps_one_hot) 182 | self.tags_one_hot = torch.cat([self.tags_one_hot, tags], dim=0) 183 | self.size += dataset.size 184 | 185 | padded_tmaps = [] 186 | 187 | for tmap in dataset.tags_iobes.tolist(): 188 | padded_tmaps.append(tmap + [self.tags_vocab_iobes.label_to_idx[C.PAD_WORD]] * (self.maxlen - len(tmap))) 189 | 190 | tags = torch.LongTensor(padded_tmaps) 191 | self.tags_iobes=torch.cat([self.tags_iobes,tags], dim=0) 192 | 193 | padded_tmaps = [] 194 | for tmap in dataset.tags_iobes_one_hot.tolist(): 195 | padded_tmaps.append(tmap + [self.tags_vocab_iobes.label_to_idx[C.PAD_WORD]] * (self.maxlen - len(tmap))) 196 | 197 | tags = torch.LongTensor(padded_tmaps) 198 | self.tags_iobes_one_hot = torch.cat([self.tags_iobes_one_hot, tags], dim=0) 199 | 200 | 201 | self.lengths=torch.cat([self.lengths,dataset.lengths], dim=0) 202 | return self 203 | 204 | def pad(self,input): 205 | for i in range(0, self.maxlen - len(input)): 206 | input.append(C.PAD_WORD) 207 | return input 208 | 209 | -------------------------------------------------------------------------------- /src/dsner.py: -------------------------------------------------------------------------------- 1 | 2 | import os 3 | import sys 4 | # necessary to add cwd to path when script run 5 | # by slurm (since it executes a copy) 6 | sys.path.append(os.getcwd()) 7 | 8 | import random 9 | import argparse 10 | import logging 11 | import torch 12 | import torch.optim as optim 13 | import constants as C 14 | from vocab import Vocab 15 | from utils import load_word_vectors_EC, build_vocab, write_output 16 | from dataset import EC_PA_Datset 17 | from trainer import Trainer_PA_SL_DSNER, Trainer_PA 18 | from model import BiLSTM_CRF_PA_CRF_LightNER, policy_selector 19 | from conlleval import evaluate, tags_to_labels 20 | from weight_init import * 21 | 22 | device = torch.device("cuda" if torch.cuda.is_available() else "cpu") 23 | 24 | 25 | 26 | 27 | def parse_args(): 28 | parser = argparse.ArgumentParser(description="PyTorch implementation of Distantly Supervised NER with Partial Annotation Learning and Reinforcement Learning ") 29 | base_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) 30 | data_dir = os.path.join(base_dir, 'data') 31 | 32 | parser.add_argument('--data', default=f'{data_dir}/EC/', 33 | help='path to dataset') 34 | parser.add_argument('--glove', default=f'{data_dir}/EC/embeddings/', 35 | help='directory with glove word embeddings') 36 | parser.add_argument('--save', default='checkpoints/', 37 | help='directory to save checkpoints in') 38 | parser.add_argument('--expname', type=str, default='test', 39 | help='Name to identify experiment') 40 | 41 | parser.add_argument('--cased', type=bool, default=False, 42 | help='if we consider lower cased true of surface form false') 43 | 44 | parser.add_argument('--max_len', default=75, type=int, 45 | help="Max lenght of input") 46 | parser.add_argument('--word_size', default=100, type=int, 47 | help="word embedding size (default: 100)") 48 | 49 | parser.add_argument('--freeze_embed', action='store_true', default=False, 50 | help='Freeze word embeddings') 51 | 52 | parser.add_argument('--batch_size', default=64, type=int, 53 | help="batchsize for optimizer updates (default: 25)") 54 | 55 | parser.add_argument('--epochs', default=800, type=int, 56 | help="number of total epochs to run (default: 10)") 57 | parser.add_argument('--lr', default=1e-3, type=float, 58 | help="initial learning rate (default: 0.001)") 59 | parser.add_argument('--weight_decay', default=1e-4, type=int, 60 | help="weight decay (default: 0.0001)") 61 | parser.add_argument('--dropout', default=0.5, type=float, 62 | help="use dropout (default: 0.5), -1: no dropout") 63 | 64 | parser.add_argument('--emblr', default=0.1, type=float, 65 | help="initial embedding learning rate (default: 0.1)") 66 | 67 | parser.add_argument('--optim', default="adam", 68 | help="optimizer (default: adam)") 69 | 70 | parser.add_argument('--seed', default=123, type=int, 71 | help="random seed (default: 123)") 72 | 73 | parser.add_argument('--SL_hidden_size', default=100, type=int, 74 | help="selector hidden size (default: 100)") 75 | 76 | parser.add_argument('--biLSTM_hidden_size', default=100, type=int, 77 | help="word BiLSTM hidden size (default: 200)") 78 | 79 | parser.add_argument('--iobes', default=False, type=bool, 80 | help="if to use BIOES tagging style") 81 | 82 | parser.add_argument('--setup', default='H', 83 | help="which dataset: H, A+H") 84 | 85 | parser.add_argument('--mode', default='SL', 86 | help="Mode of training: PA+SL,PA ,SL, CRF") 87 | 88 | return parser.parse_args() 89 | 90 | 91 | def main(): 92 | global args 93 | args = parse_args() 94 | # logger 95 | logger = logging.getLogger(__name__) 96 | logger.setLevel(logging.DEBUG) 97 | formatter = logging.Formatter("[%(asctime)s] %(levelname)s:%(name)s:%(message)s") 98 | # console logger 99 | ch = logging.StreamHandler() 100 | ch.setLevel(logging.DEBUG) 101 | ch.setFormatter(formatter) 102 | logger.addHandler(ch) 103 | 104 | args.cuda = torch.cuda.is_available() 105 | torch.manual_seed(args.seed) 106 | random.seed(args.seed) 107 | if args.cuda: 108 | torch.cuda.manual_seed(args.seed) 109 | 110 | if not os.path.exists(args.save): 111 | os.makedirs(args.save) 112 | 113 | 114 | ##print args: 115 | dataset = 'EC' 116 | print(f'{args.mode}') 117 | 118 | train_dir = os.path.join(args.data, 'train/') 119 | dev_dir = os.path.join(args.data, 'dev/') 120 | test_dir = os.path.join(args.data, 'test/') 121 | ds_pa_dir=os.path.join(args.data, 'ds_pa/') 122 | 123 | 124 | 125 | 126 | 127 | 128 | ner_vocab_file = os.path.join(args.data, 'ner.vocab') 129 | if not os.path.isfile(ner_vocab_file): 130 | token_files = [os.path.join(split, 'a.txt') for split in 131 | [train_dir, test_dir, dev_dir, ds_pa_dir] ]#[train_dir, dev_dir, test_dir] 132 | ner_vocab_file = os.path.join(args.data, 'ner.vocab') 133 | build_vocab(token_files, ner_vocab_file) 134 | 135 | vocab = Vocab(filename=ner_vocab_file) 136 | vocab.add_specials([C.UNK_WORD, C.PAD_WORD]) 137 | 138 | 139 | ner_vocab_file = os.path.join(args.data, 'ner.tags.vocab' ) 140 | if not os.path.isfile(ner_vocab_file): 141 | tags_files = [os.path.join(split, 'tags.txt') for split in 142 | [train_dir, dev_dir, test_dir, ds_pa_dir]] # [train_dir, dev_dir, test_dir] 143 | ner_vocab_file = os.path.join(args.data, 'ner.tags.vocab') 144 | build_vocab(tags_files, ner_vocab_file) 145 | 146 | tags_vocab = Vocab(filename=ner_vocab_file) 147 | tags_vocab.add_specials([C.BOS_WORD,C.PAD_WORD]) 148 | 149 | ner_vocab_file = os.path.join(args.data, 'ner.tags-iobes.vocab') 150 | if not os.path.isfile(ner_vocab_file): 151 | tags_files = [os.path.join(split, 'tags-iobes.txt') for split in 152 | [train_dir, dev_dir, test_dir, ds_pa_dir]] # [train_dir, dev_dir, test_dir] 153 | ner_vocab_file = os.path.join(args.data, 'ner-iobes.tags.vocab') 154 | build_vocab(tags_files, ner_vocab_file) 155 | 156 | tags_iobes_vocab = Vocab(filename=ner_vocab_file) # 157 | #tags_iobes_vocab.add_specials([C.BOS_WORD,C.EOS_WORD]) 158 | tags_iobes_vocab.add_specials([C.BOS_WORD,C.PAD_WORD]) 159 | 160 | 161 | # load ner dataset splits 162 | #train_file = os.path.join(args.data, 'ner.train.pth') 163 | #if os.path.isfile(train_file): 164 | # train_dataset = torch.load(train_file) 165 | #else: 166 | 167 | 168 | 169 | train_dataset = EC_PA_Datset(train_dir, vocab, tags_vocab, tags_iobes_vocab) 170 | #torch.save(train_dataset, train_file) 171 | logger.debug('==> Size of train data : %d ' % len(train_dataset)) 172 | 173 | 174 | #test_file = os.path.join(args.data, 'ner.test.pth') 175 | # if os.path.isfile(test_file): 176 | # test_dataset = torch.load(test_file) 177 | # else: 178 | test_dataset = EC_PA_Datset(test_dir, vocab, tags_vocab, tags_iobes_vocab) 179 | #torch.save(test_dataset, test_file) 180 | logger.debug('==> Size of test data : %d ' % len(test_dataset)) 181 | 182 | #dev_file = os.path.join(args.data, 'ner.dev.pth') 183 | # if os.path.isfile(dev_file): 184 | # dev_dataset = torch.load(dev_file) 185 | # else: 186 | dev_dataset = EC_PA_Datset(dev_dir, vocab, tags_vocab, tags_iobes_vocab) 187 | #torch.save(dev_dataset, dev_file) 188 | logger.debug('==> Size of dev data : %d ' % len(dev_dataset)) 189 | 190 | ds_pa_file = os.path.join(args.data, 'ner.ds_pa.pth') 191 | #if os.path.isfile(ds_pa_file): 192 | # ds_pa_dataset = torch.load(ds_pa_file) 193 | #else: 194 | ds_pa_dataset = EC_PA_Datset(ds_pa_dir, vocab, tags_vocab, tags_iobes_vocab, partial= True if 'PA' in args.mode else False) 195 | #torch.save(ds_pa_dataset, ds_pa_file) 196 | logger.debug('==> Size of ds pa data : %d ' % len(ds_pa_dataset)) 197 | 198 | #merge_file = os.path.join(args.data, 'ner.merge.pth') 199 | #if os.path.isfile(merge_file): 200 | # merge_dataset = torch.load(merge_file) 201 | #else: 202 | merge_dataset = ds_pa_dataset.merge(train_dataset) 203 | #torch.save(merge_dataset, merge_file) 204 | logger.debug('==> Size of merge data : %d ' % len(merge_dataset)) 205 | 206 | if args.iobes: 207 | tags_vocab=tags_iobes_vocab 208 | 209 | 210 | tagger_model = BiLSTM_CRF_PA_CRF_LightNER( 211 | vocab=vocab.label_to_idx, 212 | emb_size=args.word_size, 213 | tags_vocab=tags_vocab.label_to_idx, 214 | freeze_embed=True, 215 | biLSTM_hidden_size=args.biLSTM_hidden_size, 216 | dropout=args.dropout) 217 | 218 | sl_model= policy_selector(2*args.biLSTM_hidden_size+args.max_len, args.SL_hidden_size) 219 | 220 | tagger_model.apply(weight_init) 221 | sl_model.apply(weight_init) 222 | 223 | if args.cuda: 224 | tagger_model=tagger_model.to('cuda') 225 | sl_model=sl_model.to('cuda') 226 | 227 | ''' 228 | if torch.cuda.device_count() > 1: 229 | print("Let's use", torch.cuda.device_count(), "GPUs!") 230 | model = nn.DataParallel(model) 231 | ''' 232 | 233 | optimizer_tagger=optim.RMSprop(filter(lambda p: p.requires_grad, tagger_model.parameters()), lr=args.lr, 234 | weight_decay=args.weight_decay) 235 | 236 | 237 | criterion_sl = torch.nn.BCELoss(reduction='none') 238 | 239 | if args.optim == 'adam': 240 | optimizer_sl = optim.Adam(filter(lambda p: p.requires_grad, sl_model.parameters()), lr=args.lr) 241 | elif args.optim == 'adagrad': 242 | optimizer_sl = optim.Adagrad(filter(lambda p: p.requires_grad, sl_model.parameters()), lr=args.lr) 243 | elif args.optim == 'sgd': 244 | optimizer_sl = optim.SGD(filter(lambda p: p.requires_grad, sl_model.parameters()), lr=args.lr, 245 | weight_decay=args.weight_decay) 246 | 247 | 248 | # word embedding 249 | emb_file = os.path.join(args.data, 'ner.embed.pth') 250 | if os.path.isfile(emb_file): 251 | emb = torch.load(emb_file) 252 | else: 253 | # load glove embeddings and vocab 254 | glove_vocab, glove_emb = load_word_vectors_EC(os.path.join(args.glove, 'pre_trained_100dim.model')) 255 | logger.debug('==> EMBEDDINGS vocabulary size: %d ' % glove_vocab.size()) 256 | emb = torch.Tensor(vocab.size(), glove_emb.size(1)).uniform_(-0.05, 0.05) 257 | # zero out the embeddings for padding and other special words 258 | for idx, item in enumerate([C.PAD_WORD, C.UNK_WORD]): 259 | emb[idx].zero_() 260 | for word in vocab.label_to_idx.keys(): 261 | if glove_vocab.get_index(word): 262 | emb[vocab.get_index(word)] = glove_emb[glove_vocab.get_index(word)] 263 | torch.save(emb, emb_file) 264 | 265 | if args.cuda: 266 | emb = emb.cuda() 267 | 268 | tagger_model.embeddings.weight.data.copy_(emb) 269 | 270 | 271 | if args.mode=='PA+SL': 272 | # if partial = False it will apply only selection with normal crf 273 | trainer = Trainer_PA_SL_DSNER(args, tagger_model, sl_model, optimizer_tagger, optimizer_sl, criterion_sl, partial=True) 274 | else: 275 | # the result of partial = False or partial =True should be same because we do not include the Partial annotation 276 | trainer = Trainer_PA(args, tagger_model, optimizer_tagger, partial=False) 277 | 278 | best = -float('inf') 279 | 280 | 281 | 282 | # dataset: 283 | if args.setup=='A+H': 284 | dataset_setup= merge_dataset 285 | else: 286 | dataset_setup = train_dataset 287 | 288 | #print(tagger_model) 289 | 290 | f1s={} 291 | for epoch in range(args.epochs): 292 | 293 | if args.mode == 'PA+SL': 294 | train_loss = trainer.train(dataset_setup, epoch) 295 | train_f1 = 'NAN' 296 | 297 | else: 298 | train_loader = torch.utils.data.DataLoader(dataset_setup, batch_size=args.batch_size, shuffle=True, 299 | num_workers =1, pin_memory=False) 300 | _=trainer.train(train_loader,epoch) 301 | 302 | train_loader_test = torch.utils.data.DataLoader(train_dataset, batch_size=args.batch_size, shuffle=False, 303 | num_workers=1, pin_memory=False) 304 | 305 | train_loss, train_pred ,actual_tags = trainer.test(train_loader_test) 306 | actual_tags = [[int(t) for t in tags.cpu().numpy()] for tags in actual_tags] 307 | train_pred = [[int(t) for t in tags.cpu().numpy()] for tags in train_pred] 308 | 309 | # using conlleval.py 310 | actual_tags_2_label, train_pred_2_label=tags_to_labels(actual_tags, train_pred, tags_vocab.idx_to_label, 311 | args.iobes) 312 | 313 | prec, rec, train_f1 = evaluate(actual_tags_2_label,train_pred_2_label, verbose=False) 314 | train_f1 = round(train_f1, 2) 315 | 316 | print('==> Epoch {}, Train \tLoss: {:.2f}\tf1: {}'.format(epoch + 1, train_loss, train_f1)) 317 | 318 | if args.cuda: 319 | torch.cuda.empty_cache() 320 | 321 | dev_loader = torch.utils.data.DataLoader(dev_dataset, batch_size=args.batch_size, shuffle=False, 322 | num_workers=1, pin_memory=False) 323 | dev_loss, dev_pred, dev_actual_tags = trainer.test(dev_loader) 324 | 325 | dev_actual_tags = [[int(t) for t in tags.cpu().numpy()] for tags in dev_actual_tags] 326 | dev_pred = [[int(t) for t in tags.cpu()] for tags in dev_pred] 327 | 328 | 329 | dev_actual_tags_2_label, dev_train_pred_2_label = tags_to_labels(dev_actual_tags, dev_pred, 330 | tags_vocab.idx_to_label, 331 | args.iobes) 332 | prec, rec, dev_f1 = evaluate(dev_actual_tags_2_label, dev_train_pred_2_label, verbose=False) 333 | print('==> Epoch {}, dev \tLoss: {:.2f}\tf1: {:.2f}'.format(epoch + 1, dev_loss, dev_f1)) 334 | 335 | 336 | if best < dev_f1: 337 | best = dev_f1 338 | 339 | test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=args.batch_size, shuffle=False, 340 | num_workers=1, pin_memory=False) 341 | 342 | test_loss, test_pred, test_actual_tags = trainer.test(test_loader) 343 | 344 | test_actual_tags = [[int(t) for t in tags.cpu().numpy()] for tags in test_actual_tags] 345 | test_pred = [[int(t) for t in tags.cpu()] for tags in test_pred] 346 | 347 | test_actual_tags_2_label, test_train_pred_2_label = tags_to_labels(test_actual_tags, test_pred, 348 | tags_vocab.idx_to_label, 349 | args.iobes) 350 | 351 | prec, rec, test_f1 = evaluate(test_actual_tags_2_label, test_train_pred_2_label, verbose=False) 352 | 353 | print('==> Epoch {}, Test \tLoss: {:.2f}\tf1: {:.2f}'.format(epoch + 1, test_loss, test_f1)) 354 | 355 | checkpoint = { 356 | 'model_tagger': trainer.tagger_model.state_dict(), 357 | 'optim_tagger': trainer.optimizer_tagger, 358 | 'f1': test_f1, 359 | 'f1-tags': test_f1, 360 | 'predict': test_pred, 361 | 'args': args, 362 | 'epoch': epoch + 1 363 | } 364 | 365 | dataset = 'ER' 366 | filename = 'ner-{}-{}-{}-{}-{}'.format(dataset, args.mode,args.setup, 367 | args.batch_size, 368 | args.seed) 369 | logger.debug('==> New optimum found, checkpointing everything now...') 370 | torch.save(checkpoint, '%s.pt' % os.path.join(args.save, filename)) 371 | train_f1 = train_f1 if train_f1 == 'NAN' else round(train_f1, 2) 372 | f1s[epoch] = {'T': [train_f1], 'D': [round(dev_f1,2)], 'E': [round(test_f1,2)]} 373 | print(f1s) 374 | 375 | out_name = 'ner-{}-{}-{}'.format(dataset, args.mode, args.setup) 376 | output_file = os.path.join(args.data, out_name) 377 | write_output(output_file,f1s) 378 | 379 | 380 | 381 | 382 | 383 | 384 | if __name__ == "__main__": 385 | 386 | 387 | main() 388 | -------------------------------------------------------------------------------- /src/model.py: -------------------------------------------------------------------------------- 1 | 2 | 3 | from utils import sequence_mask 4 | from crf_LightNER import * 5 | torch.manual_seed(1) 6 | device = torch.device("cuda" if torch.cuda.is_available() else "cpu") 7 | import constants as C 8 | class ListModule(object): 9 | def __init__(self, module, prefix, *args): 10 | self.module = module 11 | self.prefix = prefix 12 | self.num_module = 0 13 | for new_module in args: 14 | self.append(new_module) 15 | 16 | def append(self, new_module): 17 | if not isinstance(new_module, nn.Module): 18 | raise ValueError('Not a Module') 19 | else: 20 | self.module.add_module(self.prefix + str(self.num_module), new_module) 21 | self.num_module += 1 22 | 23 | def __len__(self): 24 | return self.num_module 25 | 26 | def __getitem__(self, i): 27 | if i < 0 or i >= self.num_module: 28 | raise IndexError('Out of bound') 29 | return getattr(self.module, self.prefix + str(i)) 30 | 31 | 32 | 33 | class policy_selector(nn.Module): 34 | def __init__(self,input_size, 35 | hidden_size): 36 | super(policy_selector, self).__init__() 37 | self.affine1 = nn.Linear(input_size, hidden_size) 38 | self.affine2 = nn.Linear(hidden_size, 1) 39 | self.sigmoid = nn.Sigmoid() 40 | self.saved_log_probs = [] 41 | self.rewards = [] 42 | 43 | def forward(self, x): 44 | x = self.affine1(x) 45 | action_scores = self.affine2(x) 46 | return self.sigmoid(action_scores) 47 | 48 | 49 | 50 | 51 | class BiLSTM_CRF_PA_CRF_LightNER(nn.Module): 52 | def __init__(self, vocab, 53 | emb_size, 54 | tags_vocab, 55 | freeze_embed, 56 | biLSTM_hidden_size=None, 57 | dropout=None): 58 | """ """ 59 | super(BiLSTM_CRF_PA_CRF_LightNER, self).__init__() 60 | # word embedding 61 | 62 | self.vocab_size=len(vocab) 63 | padding_idx_in_sentence = vocab[''] 64 | 65 | self.embeddings = nn.Embedding(self.vocab_size, emb_size, padding_idx=padding_idx_in_sentence) 66 | 67 | if freeze_embed: # no update 68 | self.embeddings.weight.requires_grad = False 69 | 70 | self.dropout = nn.Dropout(p=dropout) if dropout!= -1 else None 71 | 72 | 73 | self.tagset_size = len(tags_vocab) 74 | self.tags_vocab=tags_vocab 75 | 76 | 77 | # Hierachical Bi-LSTM 78 | self.biLSTM_hiddes_size=biLSTM_hidden_size 79 | 80 | self.BiLSTM = nn.LSTM( 81 | input_size=emb_size, 82 | hidden_size=self.biLSTM_hiddes_size, 83 | num_layers=2, 84 | bidirectional=True, 85 | batch_first=True, 86 | dropout=dropout 87 | ) 88 | 89 | self.crf_layer = CRF_L(2* self.biLSTM_hiddes_size, self.tagset_size) 90 | self.crf_layer.rand_init() 91 | self.viterbiLoss = CRFLoss_vb( self.tagset_size,self.tags_vocab[C.BOS_WORD],self.tags_vocab[C.PAD_WORD]) 92 | self.viterbiLoss_PA= CRFLoss_vb_PA(self.tagset_size, self.tags_vocab[C.BOS_WORD], self.tags_vocab[C.PAD_WORD]) 93 | self.viterbiDecoder = CRFDecode_vb(self.tagset_size,self.tags_vocab[C.BOS_WORD],self.tags_vocab[C.PAD_WORD]) 94 | 95 | def _feature(self,inputs,lengths,tags_one_hot=None): 96 | """""" 97 | w_lengths, word_sort_ind = lengths.sort(dim=0, descending=True) 98 | # should catch from proper index 99 | inputs = inputs[word_sort_ind].to(device) 100 | if tags_one_hot is not None: 101 | tags_one_hot = tags_one_hot[word_sort_ind].byte().to(device) 102 | 103 | # compute features 104 | inputs_emb = self.embeddings(inputs) 105 | w = self.dropout(inputs_emb) 106 | 107 | # Pack padded sequence 108 | w = torch.nn.utils.rnn.pack_padded_sequence(w, list(w_lengths), 109 | batch_first=True) # packed sequence of word_emb_dim + 2 * char_rnn_dim, with real sequence lengths 110 | 111 | # LSTM 112 | w, _ = self.BiLSTM(w) # packed sequence of word_rnn_dim, with real sequence lengths 113 | # Unpack packed sequence 114 | 115 | w, _ = torch.nn.utils.rnn.pad_packed_sequence(w, 116 | batch_first=True) # (batch_size, max_word_len_in_batch, word_rnn_dim) 117 | 118 | w = self.dropout(w) 119 | 120 | mask = sequence_mask(w_lengths).float() 121 | 122 | crf_scores = self.crf_layer(w) 123 | return crf_scores, tags_one_hot, mask, w_lengths, word_sort_ind 124 | 125 | def forward_eval(self,inputs,lengths,tags): 126 | crf_scores, _, mask,w_lengths, word_sort_ind = self._feature(inputs, lengths) 127 | loss = self.viterbiLoss(crf_scores, tags, mask) 128 | tmaps = tags[word_sort_ind] % self.tagset_size # actual target indices (see dataset()) 129 | 130 | preds = self.viterbiDecoder.decode(crf_scores, mask) 131 | return loss, preds, w_lengths, tmaps 132 | 133 | def forward(self,inputs, lengths, tags_one_hot): 134 | crf_scores, tags_one_hot, mask,_,_ =self._feature(inputs,lengths,tags_one_hot) 135 | loss = self.viterbiLoss_PA(crf_scores, tags_one_hot, mask) 136 | return loss 137 | 138 | 139 | def forward_sl(self,inputs,lengths,tags): 140 | crf_scores, _, mask, w_lengths, word_sort_ind = self._feature(inputs, lengths) 141 | tmaps = tags[word_sort_ind] % self.tagset_size # actual target indices (see dataset()) 142 | preds = self.viterbiDecoder.decode(crf_scores, mask) 143 | return preds, w_lengths, tmaps, word_sort_ind 144 | -------------------------------------------------------------------------------- /src/script/preprocess-EC.py: -------------------------------------------------------------------------------- 1 | """ 2 | Preprocessing script for EC data. 3 | 4 | """ 5 | 6 | import os 7 | from src import utils 8 | def make_dirs(dirs): 9 | for d in dirs: 10 | if not os.path.exists(d): 11 | os.makedirs(d) 12 | 13 | 14 | 15 | def build_vocab(filepaths, dst_path, lowercase=True): 16 | vocab = set() 17 | for filepath in filepaths: 18 | with open(filepath) as f: 19 | for line in f: 20 | if lowercase: 21 | line = line.lower() 22 | vocab |= set(line.split()) 23 | with open(dst_path, 'w') as f: 24 | for w in sorted(vocab): 25 | f.write(w + '\n') 26 | 27 | 28 | 29 | def read_split_datafiles(filepath, dst_dir, tag_ind, caseless=False): 30 | """ 31 | Reads raw data 32 | :return: word, tag sequences 33 | """ 34 | cased='lower' if caseless else '' 35 | with open(filepath) as datafile, \ 36 | open(os.path.join(dst_dir, 'a%s.txt' % cased), 'w') as afile, \ 37 | open(os.path.join(dst_dir, 'id.txt'), 'w') as idfile, \ 38 | open(os.path.join(dst_dir, 'tags.txt'), 'w') as tagsfile, \ 39 | open(os.path.join(dst_dir, 'tags-iobes.txt'), 'w') as tagsfile_iobes: 40 | index=0 41 | temp_w = [] 42 | temp_t = [] 43 | idx=0 44 | for line in datafile: 45 | idx+=1 46 | if not (line.isspace() or (len(line) > 10 and line[0:10] == '-DOCSTART-')): 47 | feats = line.rstrip('\n').split("\t") 48 | print (f'{feats}-{idx}') 49 | # convert to digit 50 | token=feats[0].lower() if caseless else feats[0] 51 | #token=re.sub('\d', '0', token) 52 | temp_w.append(token) 53 | temp_t.append(feats[tag_ind]) 54 | elif len(temp_w) > 0: 55 | assert len(temp_w) == len(temp_t) 56 | idfile.write(str(index) + '\n') 57 | afile.write('\t'.join(temp_w)+ '\n') 58 | tagsfile.write('\t'.join(temp_t) + '\n') 59 | tagsfile_iobes.write('\t'.join(utils.iob_iobes(temp_t))+ '\n') 60 | temp_w = [] 61 | temp_t = [] 62 | index += 1 63 | # last sentence 64 | if len(temp_w) > 0: 65 | assert len(temp_w) == len(temp_t) 66 | idfile.write(str(index) + '\n') 67 | afile.write('\t'.join(temp_w) + '\n') 68 | tagsfile.write('\t'.join(temp_t) + '\n') 69 | tagsfile_iobes.write('\t'.join(utils.iob_iobes(temp_t))+ '\n') 70 | 71 | 72 | 73 | 74 | if __name__ == '__main__': 75 | print('=' * 80) 76 | print('Preprocessing EC PA dataset') 77 | print('=' * 80) 78 | 79 | base_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) 80 | data_dir = os.path.join(base_dir, 'data') 81 | ner_dir = os.path.join(data_dir, 'EC') 82 | train_dir = os.path.join(ner_dir, 'train') 83 | dev_dir = os.path.join(ner_dir, 'dev') 84 | test_dir = os.path.join(ner_dir, 'test') 85 | ds_pa=os.path.join(ner_dir, 'ds_pa') 86 | 87 | make_dirs([train_dir, dev_dir, test_dir,ds_pa]) 88 | 89 | 90 | 91 | # split into separate file 92 | caseless=False 93 | cased = 'lower' if caseless else '' 94 | read_split_datafiles(os.path.join(ner_dir, 'train.txt'), train_dir,tag_ind=1, caseless=caseless) 95 | read_split_datafiles(os.path.join(ner_dir, 'dev.txt'), dev_dir,tag_ind=1,caseless=caseless) 96 | 97 | read_split_datafiles(os.path.join(ner_dir, 'test.txt'), test_dir,tag_ind=1,caseless=caseless) 98 | read_split_datafiles(os.path.join(ner_dir, 'ds_fa.txt'), ds_pa, tag_ind=1,caseless=caseless) 99 | 100 | 101 | 102 | 103 | 104 | 105 | -------------------------------------------------------------------------------- /src/trainer.py: -------------------------------------------------------------------------------- 1 | 2 | 3 | from tqdm import tqdm 4 | import torch 5 | import math 6 | import numpy as np 7 | import torch.nn.functional as F 8 | import constants as C 9 | from utils import nextBatch 10 | device = torch.device("cuda" if torch.cuda.is_available() else "cpu") 11 | 12 | 13 | 14 | class Trainer_PA_SL_DSNER(object): 15 | """""" 16 | def __init__(self, args, tagger_mdl, sl_mdl, optimizer_tagger, optimizer_sl, criterion_sl, partial): 17 | """""" 18 | self.args = args 19 | self.tagger_model = tagger_mdl 20 | self.sl_model = sl_mdl 21 | self.criterion_sl = criterion_sl 22 | 23 | self.tagset_size = tagger_mdl.tagset_size 24 | self.o_tag = tagger_mdl.tags_vocab['O'] 25 | self.pad_tag = tagger_mdl.tags_vocab[C.PAD_WORD] 26 | 27 | ''' 28 | it need to define two optimizer: 29 | 1- for selector 30 | 2- for encoder+crf 31 | 32 | first, calculate the reward from encoder+crf 33 | then, calculate loss for the selector 34 | and, add reward to the loss and optimize the select parameters 35 | for name, param in self.model.named_parameters(): 36 | print (f'{name}: {param.requires_grad}') 37 | ''' 38 | # 39 | 40 | self.optimizer_tagger = optimizer_tagger 41 | self.optimizer_sl = optimizer_sl 42 | self.epoch = 0 43 | self.partial = partial 44 | 45 | def train(self, dataset, epoch): 46 | """""" 47 | self.tagger_model.train() 48 | # self.optimizer_tagger.zero_grad() 49 | 50 | self.epoch = epoch 51 | total_loss = 0.0 52 | 53 | cnt = 0 54 | exist_num_in_batch = 0 # instance num in this batch(expert + select_pa_sample) 55 | PA_num_in_batch = 0 # select_pa_sample_num in this sample (number of PAs) 56 | y_label_in_batch = [] # all_pa_data action (0/1) 57 | PA_sentense_representation = [] # representation of every PA instance 58 | X_char_batch = [] 59 | y_batch = [] 60 | # sign_batch=[] 61 | s_length_batch = [] 62 | y_one_hot_batch = [] 63 | 64 | # not update 65 | total_PA_num = 0 66 | X_char_all = [] 67 | y_all = [] 68 | # sign_all=[] 69 | s_length_all = [] 70 | y_one_hot_all = [] 71 | 72 | indices = torch.randperm(len(dataset)) 73 | 74 | for start_index in tqdm(range(len(dataset)), desc='Training epoch ' + str(self.epoch) + ''): 75 | 76 | sent, tags, tags_iobes, sign, s_length, y_one_hot, y_iobes_one_hot = dataset[indices[start_index]] 77 | 78 | if self.args.iobes: 79 | tags = tags_iobes 80 | y_one_hot = y_iobes_one_hot 81 | del y_iobes_one_hot, tags_iobes 82 | else: 83 | del y_iobes_one_hot, tags_iobes 84 | 85 | 86 | if exist_num_in_batch == self.args.batch_size: # if the number of the one that selected + experts== batch_size 87 | X_char_all.extend(X_char_batch) 88 | y_all.extend(y_batch) 89 | s_length_all.extend(s_length_batch) 90 | # sign_all.extend(sign_batch) 91 | y_one_hot_all.extend(y_one_hot_batch) 92 | cnt += 1 93 | ''' 94 | optimize the selector: 95 | 1. count reward: add all p(y|x) of dev_dataset and average 96 | 2. input1: average_reward 97 | 3. input2: all PA_sample in this step(0 or 1) 98 | ''' 99 | if len(y_label_in_batch) > 0: 100 | # calculate reward as r=1/(|A_i| +|H_i|) *(sum(log p(z|x)) + sum(log p(y|x)) just for EXperts and PA that selector choose 101 | reward = self.get_reward(X_char_batch, s_length_batch, y_one_hot_batch) 102 | reward_list = [reward for i in range(len(y_label_in_batch))] 103 | # @todo convert to cuda: 104 | self.optimize_selector(PA_sentense_representation, y_label_in_batch, reward_list) 105 | 106 | total_PA_num += PA_num_in_batch 107 | exist_num_in_batch = 0 108 | PA_num_in_batch = 0 109 | y_label_in_batch = [] 110 | PA_sentense_representation = [] 111 | X_char_batch = [] 112 | y_batch = [] 113 | sign_batch = [] 114 | s_length_batch = [] 115 | y_one_hot_batch = [] 116 | 117 | if sign == 0: # if it is the expert instance 118 | exist_num_in_batch += 1 119 | X_char_batch.append(sent) 120 | y_batch.append(tags) 121 | # sign_batch.append(sign) 122 | s_length_batch.append(s_length) 123 | y_one_hot_batch.append(y_one_hot) 124 | 125 | elif sign == 1: # the PA instance 126 | this_representation = self.get_representation(sent, tags, s_length) 127 | PA_sentense_representation.append(this_representation) 128 | action_point = self.select_action( 129 | this_representation) # Get the probablity fro selector for the sentence 130 | if action_point > 0.5: 131 | X_char_batch.append(sent) 132 | y_batch.append(tags) 133 | # sign_batch.append(sign) 134 | s_length_batch.append(s_length) 135 | y_one_hot_batch.append(y_one_hot) 136 | PA_num_in_batch += 1 137 | exist_num_in_batch += 1 138 | y_label_in_batch.append(1) 139 | else: 140 | y_label_in_batch.append(0) 141 | 142 | if exist_num_in_batch <= self.args.batch_size and exist_num_in_batch > 0: 143 | cnt += 1 144 | left_size = self.args.batch_size - exist_num_in_batch 145 | for i in range(left_size): 146 | index = np.random.randint(len(dataset)) 147 | sent, tags, tags_iobes, sign, s_length, y_one_hot, y_one_hot_iobes = dataset[index] 148 | if self.args.iobes: 149 | tags = tags_iobes 150 | y_one_hot=y_one_hot_iobes 151 | X_char_batch.append(sent) 152 | y_batch.append(tags) 153 | sign_batch.append(sign) 154 | s_length_batch.append(s_length) 155 | y_one_hot_batch.append(y_one_hot) 156 | X_char_all.extend(X_char_batch) 157 | y_all.extend(y_batch) 158 | # sign_all.extend(sign_batch) 159 | s_length_all.extend(s_length_batch) 160 | y_one_hot_all.extend(y_one_hot_batch) 161 | 162 | if len(y_label_in_batch) > 0: 163 | reward = self.get_reward(X_char_batch, s_length_batch, y_one_hot_batch) 164 | reward_list = [reward for i in range(len(y_label_in_batch))] 165 | # just for PA (0,1) 166 | self.optimize_selector(PA_sentense_representation, y_label_in_batch, reward_list) 167 | 168 | 169 | # optimize baseline 170 | num_iterations = int(math.ceil(1.0 * len(X_char_all) / self.args.batch_size)) 171 | total_loss = 0 172 | 173 | for iteration in tqdm(range(num_iterations), desc='Tagger optimizing epoch ' + str(self.epoch) + ''): 174 | self.tagger_model.train() 175 | self.optimizer_tagger.zero_grad() 176 | X_char_train_batch, s_length_batch, y_one_hot_batch = nextBatch(X_char_all, s_length_all, y_one_hot_all, 177 | start_index=iteration * self.args.batch_size, 178 | batch_size=self.args.batch_size) 179 | 180 | X_char_train_batch = torch.stack(X_char_train_batch) 181 | #y_train_batch = torch.stack(y_train_batch) 182 | s_length_batch = torch.stack(s_length_batch) 183 | y_one_hot_batch = torch.stack(y_one_hot_batch) 184 | 185 | batch_loss = self.tagger_model(X_char_train_batch, s_length_batch, y_one_hot_batch) 186 | 187 | total_loss += float(batch_loss) 188 | # retain_graph=True 189 | batch_loss.backward() 190 | self.optimizer_tagger.step() 191 | 192 | total_loss = float(total_loss / num_iterations) 193 | cnt += 1 194 | print("epoch %d iteration %d end, train_PA loss: %.4f, total_PA_num: %5d" % ( 195 | epoch, cnt, total_loss, total_PA_num)) 196 | # Decay learning rate every epoch 197 | return total_loss 198 | 199 | def get_reward(self, x_words, lengths, y_tags_one_hot): 200 | self.tagger_model.eval() 201 | with torch.no_grad(): 202 | x_words = torch.stack(x_words) 203 | lengths = torch.stack(lengths) 204 | #y_tags=torch.stack(y_tags) 205 | y_tags_one_hot = torch.stack(y_tags_one_hot) 206 | batch_loss = self.tagger_model(x_words, lengths, y_tags_one_hot) 207 | reward = -1 * (batch_loss / self.args.batch_size) 208 | return reward 209 | 210 | def select_action(self, state): 211 | # state = torch.from_numpy(state).float().unsqueeze(0) 212 | self.sl_model.eval() 213 | prob = self.sl_model(state) 214 | 215 | return prob.item() 216 | 217 | def optimize_selector(self, x_representations, y_select, rewards): 218 | self.sl_model.train() 219 | self.optimizer_sl.zero_grad() 220 | #eps = np.finfo(np.float32).eps.item() 221 | 222 | x_representations = torch.stack(x_representations).to(device) 223 | y_select = torch.FloatTensor(y_select).to(device) 224 | 225 | y_preds = self.sl_model(x_representations) 226 | y_preds = y_preds.squeeze(2).squeeze(1) 227 | 228 | neg_log_prob = self.criterion_sl(y_preds, y_select) 229 | rewards = torch.FloatTensor(rewards).to(device) 230 | policy_loss = torch.sum(neg_log_prob * rewards) 231 | #policy_loss = neg_log_prob * rewards 232 | 233 | lambda1, lambda2 = 0.003, 0.003 234 | all_linear1_params = torch.cat([x.view(-1) for x in self.sl_model.affine1.parameters()]) 235 | all_linear2_params = torch.cat([x.view(-1) for x in self.sl_model.affine1.parameters()]) 236 | l1_regularization = lambda1 * torch.norm(all_linear1_params, 1) 237 | l2_regularization = lambda2 * torch.norm(all_linear2_params, 2) 238 | policy_loss += l1_regularization + l2_regularization 239 | #torch.autograd.backward(policy_loss,grad_tensors=torch.ones_like(policy_loss)) 240 | policy_loss.backward() 241 | self.optimizer_sl.step() 242 | 243 | def get_representation(self, X_char, y_char, length): 244 | # concat sample_representation and tag_representation 245 | # Get representation from BiLSTM for the current sentence 246 | with torch.no_grad(): 247 | X_char = X_char.to(device) 248 | w = self.tagger_model.embeddings(X_char).unsqueeze(0) 249 | w = self.tagger_model.dropout(w) 250 | 251 | # Pack padded sequence 252 | w = torch.nn.utils.rnn.pack_padded_sequence(w, list([self.args.max_len]), 253 | batch_first=True) 254 | # lstm 255 | output, (h, cell) = self.tagger_model.BiLSTM( 256 | w) # packed sequence of word_rnn_dim, with real sequence lengths 257 | 258 | # Unpack packed sequence 259 | output, _ = torch.nn.utils.rnn.pad_packed_sequence(output, 260 | batch_first=True) # (batch_size, max_word_len_in_batch, word_rnn_dim) 261 | 262 | output = self.tagger_model.dropout(output) 263 | 264 | w_last_node = output[:, length - 1, :] 265 | 266 | this_representation_o_t = self.tagger_model.crf_layer.hidden2tag(output) 267 | 268 | # get the lable score ( if the label is unk get averge of all label scores 269 | y_char = y_char % self.tagset_size 270 | tag_scores = [] 271 | # @ todo cuda 272 | for i, y in enumerate(y_char): 273 | if y == self.o_tag and self.partial == True: 274 | tag_scores.append(torch.mean(this_representation_o_t[:, i, :])) 275 | else: 276 | tag_scores.append(this_representation_o_t[:, i, y].squeeze(0)) 277 | tag_scores = torch.stack(tag_scores).unsqueeze(0) 278 | rep = torch.cat([w_last_node, tag_scores], dim=-1) 279 | return rep 280 | 281 | def test(self, val_loader): 282 | """""" 283 | self.tagger_model.eval() 284 | total_loss = 0 285 | predictions = [] 286 | sents_decoded = [] 287 | actual_tags = [] 288 | 289 | for i, (sents, tags, tags_iobes, signs, s_lengths, _,_) in enumerate(val_loader): 290 | max_word_len = max(s_lengths.tolist()) 291 | 292 | if self.args.iobes: 293 | tags = tags_iobes 294 | 295 | 296 | # Reduce batch's padded length to maximum in-batch sequence 297 | # This saves some compute on nn.Linear layers (RNNs are unaffected, since they don't compute over the pads) 298 | sents = sents[:, :max_word_len] 299 | tags = tags[:, :max_word_len] 300 | s_lengths = s_lengths.to(device) 301 | loss, decoded, w_lengths, tags_sorted = self.tagger_model.forward_eval(sents, s_lengths,tags) 302 | 303 | decoded = decoded.transpose(1, 0) 304 | decoded_sorted = [decoded[:length-1] for decoded, length in zip(decoded, w_lengths)] 305 | tags_sorted = [tag[:length-1] for tag, length in zip(tags_sorted, w_lengths)] 306 | 307 | predictions.extend(decoded_sorted) 308 | 309 | total_loss += float(loss) 310 | actual_tags.extend(tags_sorted) 311 | 312 | total_loss = float(total_loss / len(val_loader)) 313 | 314 | return total_loss, predictions, actual_tags 315 | class Trainer_PA(object): 316 | """""" 317 | 318 | def __init__(self, args, tagger_mdl, optimizer_tagger, partial=False): 319 | """""" 320 | self.args = args 321 | self.tagger_model = tagger_mdl 322 | 323 | 324 | self.tagset_size = tagger_mdl.tagset_size 325 | self.o_tag = tagger_mdl.tags_vocab['O'] 326 | self.partial=partial 327 | 328 | self.optimizer_tagger = optimizer_tagger 329 | self.epoch = 0 330 | 331 | def train(self, train_loader, epoch): 332 | 333 | """""" 334 | self.tagger_model.train() 335 | 336 | self.epoch = epoch 337 | total_loss = 0.0 338 | 339 | PA_s=0 340 | for data in tqdm(train_loader, desc='Tagger optimizing epoch ' + str(self.epoch) + ''): 341 | sents, tags, tags_iobes, signs, s_lengths, tags_one_hot, tags_iobes_one_hot=data 342 | max_word_len = max(s_lengths.tolist()) 343 | if self.args.iobes: 344 | tags= tags_iobes 345 | tags_one_hot=tags_iobes_one_hot 346 | 347 | tags = tags[:, :max_word_len].to(device) 348 | tags_one_hot=tags_one_hot[:, :max_word_len].byte().to(device) 349 | batch_loss = self.tagger_model(sents, s_lengths,tags_one_hot) 350 | 351 | total_loss += batch_loss.item() 352 | self.optimizer_tagger.zero_grad() 353 | batch_loss.backward() 354 | self.optimizer_tagger.step() 355 | 356 | #print ('total loss: '+ str(total_loss)) 357 | total_loss= float(total_loss / (len(train_loader))) 358 | print("epoch {} end, train loss:{} , pa-instances: {} " .format(epoch, total_loss ,PA_s)) 359 | return total_loss 360 | 361 | def getState(self, trn_loader, x_unls, x_candidate, y_candidate): 362 | 363 | x_trns=[] 364 | y_trns=[] 365 | y_iobes_trns=[] 366 | x_lens=[] 367 | self.tagger_model.eval() 368 | 369 | with torch.no_grad(): 370 | for i_batch, (x_trn, y_trn, y_iobes_trn,_, x_len) in enumerate(trn_loader): 371 | x_trns.extend(x_trn) 372 | y_trns.extend(y_trn) 373 | y_iobes_trns.extend(y_iobes_trn) 374 | x_lens.extend(x_len) 375 | if self.args.iobes: 376 | y_trn = y_iobes_trns 377 | 378 | #@todo cuda device 379 | x_trns=torch.stack(x_trns) 380 | y_trns=torch.stack(y_trns) 381 | x_lens =torch.stack(x_lens) 382 | 383 | w_emb = self.tagger_model.embeddings(x_trns) 384 | 385 | sum_w_emb=torch.sum(torch.sum(w_emb, dim=0), dim=1) 386 | # @todo get sum of embedding based on the len each sentence 387 | # lstm 388 | w, _ = self.tagger_model.BiLSTM(w_emb) 389 | 390 | this_representation_o_t = self.tagger_model.MLP(w) 391 | # get the lable score ( if the label is unk get averge of all label scores 392 | y_chars = y_trns % self.tagset_size 393 | tag_scores = [] 394 | for i, y in enumerate(y_chars): 395 | tag_score=[] 396 | tag_score=torch.stack([this_representation_o_t[i, j, y_i] for j, y_i in enumerate(y)]) 397 | tag_scores.append(tag_score) 398 | 399 | # @todo get scores based on the len each sentence 400 | tag_scores = torch.stack(tag_scores) 401 | sum_tag_scores=torch.sum(tag_scores,dim=0) 402 | 403 | unls_emb = self.tagger_model.embeddings(x_unls) 404 | sum_unls_emb=torch.sum(torch.sum(unls_emb, dim=0), dim=1) 405 | 406 | # fake dim 407 | 408 | em_candidate=self.tagger_model.embeddings(x_candidate).unsqueeze(0) 409 | sum_em_candidate = torch.sum(torch.sum(em_candidate, dim=0), dim=1) 410 | w_candidate, _ = self.tagger_model.BiLSTM(em_candidate) 411 | 412 | candidate_o_t = self.tagger_model.MLP(w_candidate) 413 | # get the lable score ( if the label is unk get averge of all label scores 414 | y_char = y_candidate % self.tagset_size 415 | tag_scores = [] 416 | 417 | tag_scores_candidate =torch.stack([candidate_o_t[:, i, y].squeeze(0) for i, y in enumerate(y_char)]) 418 | 419 | state = torch.cat([sum_w_emb, sum_tag_scores, sum_unls_emb, sum_em_candidate, tag_scores_candidate ], dim=-1) 420 | 421 | return state 422 | 423 | def test(self, val_loader): 424 | """""" 425 | self.tagger_model.eval() 426 | total_loss = 0 427 | predictions = [] 428 | sents_decoded = [] 429 | actual_tags = [] 430 | 431 | for i, (sents, tags, tags_iobes, signs, s_lengths,tags_one_hot,tags_iobes_one_hot) in enumerate(val_loader): 432 | max_word_len = max(s_lengths.tolist()) 433 | 434 | if self.args.iobes: 435 | tags = tags_iobes 436 | tags_one_hot=tags_iobes_one_hot 437 | 438 | # Reduce batch's padded length to maximum in-batch sequence 439 | # This saves some compute on nn.Linear layers (RNNs are unaffected, since they don't compute over the pads) 440 | sents = sents[:, :max_word_len].to(device) 441 | tags = tags[:, :max_word_len].to(device) 442 | 443 | s_lengths = s_lengths.to(device) 444 | loss, decoded, w_lengths, tags_sorted = self.tagger_model.forward_eval(sents, s_lengths,tags) 445 | 446 | decoded=decoded.transpose(1,0) 447 | decoded_sorted = [decoded[:length-1] for decoded, length in zip(decoded, w_lengths)] 448 | # Remove timesteps we won't predict at, and also tags, because to predict them would be cheating 449 | tags_sorted=[tag[:length-1] for tag, length in zip(tags_sorted, w_lengths)] 450 | predictions.extend(decoded_sorted) 451 | total_loss += loss 452 | actual_tags.extend(tags_sorted) 453 | total_loss = float(total_loss / len(val_loader)) 454 | return total_loss, predictions, actual_tags 455 | 456 | 457 | 458 | 459 | 460 | class trainer_policy(object): 461 | """""" 462 | def __init__(self, args, policy_model, policy_optimizer): 463 | """""" 464 | self.args = args 465 | self.policy_model = policy_model 466 | self.policy_optimizer = policy_optimizer 467 | 468 | 469 | def train(self, train_loader, epoch): 470 | """""" 471 | self.policy_model.train() 472 | 473 | self.epoch = epoch 474 | total_loss = 0.0 475 | self.policy_optimizer.zero_grade() 476 | 477 | for states, actions_actual, in train_loader: 478 | self.policy_optimizer.zero_grad() 479 | p_action= self.policy_model(states) 480 | loss = F.nll_loss(p_action, actions_actual) 481 | # backward 482 | total_loss += loss 483 | loss.backward() 484 | total_loss+=loss 485 | self.policy_optimizer.step() 486 | total_loss=float(total_loss/len(train_loader)) 487 | return total_loss 488 | 489 | 490 | def test(self,val_loader): 491 | self.policy_model.eval() 492 | predictions = [] 493 | for i, (x, y) in enumerate( 494 | val_loader): 495 | p_actions= self.policy_model(x,y) 496 | preds= p_actions.data.max(1, keepdim=True)[1] 497 | predictions.extend(preds) 498 | return predictions 499 | 500 | 501 | 502 | 503 | -------------------------------------------------------------------------------- /src/utils.py: -------------------------------------------------------------------------------- 1 | 2 | import os 3 | import torch 4 | from vocab import Vocab 5 | import math 6 | from tqdm import tqdm 7 | import numpy as np 8 | from typing import List, Tuple 9 | import re 10 | 11 | 12 | def load_word_vectors(path): 13 | if os.path.isfile(path + '.pth') and os.path.isfile(path + '.vocab'): 14 | vectors = torch.load(path + '.pth') 15 | vocab = Vocab(filename=path + '.vocab') 16 | return vocab, vectors 17 | 18 | print("==> Preprocessing glove file!") 19 | count = sum(1 for _ in open(path + '.txt')) 20 | with open(path + '.txt', 'r') as f: 21 | contents = f.readline().rstrip('\n').split(' ') 22 | dim = len(contents[1:]) 23 | words = [None] * count 24 | vectors = torch.zeros(count, dim) 25 | with open(path + '.txt', 'r') as f: 26 | idx = 0 27 | for line in tqdm(f): 28 | contents = line.rstrip('\n').split(' ') 29 | words[idx] = contents[0] 30 | vectors[idx] = torch.Tensor(list(map(float, contents[1:]))) 31 | idx += 1 32 | with open(path + '.vocab', 'w') as f: 33 | for word in words: 34 | f.write(word + '\n') 35 | vocab = Vocab(filename=path + '.vocab') 36 | torch.save(vectors, path + '.pth') 37 | return vocab, vectors 38 | 39 | def load_word_vectors_EC(path): 40 | if os.path.isfile(path + '.pth') and os.path.isfile(path + '.vocab'): 41 | vectors = torch.load(path + '.pth') 42 | vocab = Vocab(filename=path + '.vocab') 43 | return vocab, vectors 44 | 45 | print("==> Preprocessing glove file!") 46 | count = sum(1 for _ in open(path + '.txt')) 47 | with open(path + '.txt', 'r') as f: 48 | contents = f.readline().rstrip('\n').split('\t') 49 | dim = len(contents[1:]) 50 | words = [None] * count 51 | vectors = torch.zeros(count, dim) 52 | with open(path + '.txt', 'r') as f: 53 | idx = 0 54 | for line in tqdm(f): 55 | contents = line.rstrip('\n').split('\t') 56 | words[idx] = contents[0] 57 | vectors[idx] = torch.Tensor(list(map(float, contents[1:]))) 58 | idx += 1 59 | with open(path + '.vocab', 'w') as f: 60 | for word in words: 61 | f.write(word + '\n') 62 | vocab = Vocab(filename=path + '.vocab') 63 | torch.save(vectors, path + '.pth') 64 | return vocab, vectors 65 | 66 | 67 | def build_vocab(filenames, vocabfile, char=False,lowercase=False): 68 | vocab = set() 69 | for filename in filenames: 70 | with open(filename, 'r') as f: 71 | for line in f: 72 | if lowercase: 73 | line = line.lower() 74 | if char: 75 | words=line.rstrip('\n').split() 76 | tokens=[] 77 | for word in words: 78 | for ch in word: 79 | tokens.append(ch) 80 | else: 81 | tokens = line.rstrip('\n').split() 82 | vocab |= set(tokens) 83 | with open(vocabfile, 'w') as f: 84 | for token in sorted(vocab): 85 | f.write(token + '\n') 86 | 87 | def write_output(filename,result): 88 | with open(filename, 'w') as f: 89 | for key, value in result.items(): 90 | f.write('%s:%s\n' % (key, value)) 91 | 92 | 93 | 94 | 95 | 96 | def map_label_to_target(label): 97 | target = torch.LongTensor(1) 98 | target[0] = int(label) 99 | return target 100 | 101 | 102 | def map_float_label_to_target(label, num_classes=5): 103 | target = torch.zeros(1, num_classes) 104 | ceil = int(math.ceil(label)) 105 | floor = int(math.floor(label)) 106 | if ceil == floor: 107 | target[0][floor - 1] = 1 108 | else: 109 | target[0][floor - 1] = ceil - label 110 | target[0][ceil - 1] = label - floor 111 | return target 112 | 113 | 114 | def count_params(model): 115 | print("__param count_") 116 | params = list(model.parameters()) 117 | total_params = 0 118 | for p in params: 119 | if p.requires_grad: 120 | total_params += p.numel() 121 | print(p.size()) 122 | print("total", total_params) 123 | print('______________') 124 | 125 | def log_sum_exp(x): 126 | m = torch.max(x, -1)[0] 127 | return m + torch.log(torch.sum(torch.exp(x - m.unsqueeze(-1)), -1)) 128 | 129 | def argmax(vec): 130 | # return the argmax as a python int 131 | _, idx = torch.max(vec, 1) 132 | return idx.item() 133 | 134 | def revlut(lut): 135 | return {v: k for k, v in lut.items()} 136 | 137 | def log_sum_exp_PA(x,islast=False): 138 | pass 139 | 140 | def one_hot_embedding(labels, num_classes): 141 | """Embedding labels to one-hot form. 142 | 143 | Args: 144 | labels: (LongTensor) class labels, sized [N,]. 145 | num_classes: (int) number of classes. 146 | 147 | Returns: 148 | (tensor) encoded labels, sized [N, #classes]. 149 | """ 150 | y = torch.eye(num_classes) 151 | return y[labels] 152 | 153 | # Turn a sequence of IOB chunks into single tokens 154 | def iob_to_spans(sequence, lut, strict_iob2=False): 155 | """ 156 | convert to iob to span 157 | """ 158 | iobtype = 2 if strict_iob2 else 1 159 | chunks = [] 160 | current = None 161 | 162 | for i, y in enumerate(sequence): 163 | label = lut[y] 164 | 165 | if label.startswith('B-'): 166 | if current is not None: 167 | chunks.append('@'.join(current)) 168 | current = [label.replace('B-', ''), '%d' % i] 169 | 170 | elif label.startswith('I-'): 171 | 172 | if current is not None: 173 | base = label.replace('I-', '') 174 | if base == current[0]: 175 | current.append('%d' % i) 176 | else: 177 | chunks.append('@'.join(current)) 178 | if iobtype == 2: 179 | print('Warning, type=IOB2, unexpected format ([%s] follows other tag type [%s] @ %d)' % ( 180 | label, current[0], i)) 181 | 182 | current = [base, '%d' % i] 183 | 184 | else: 185 | current = [label.replace('I-', ''), '%d' % i] 186 | if iobtype == 2: 187 | print('Warning, unexpected format (I before B @ %d) %s' % (i, label)) 188 | else: 189 | if current is not None: 190 | chunks.append('@'.join(current)) 191 | current = None 192 | 193 | if current is not None: 194 | chunks.append('@'.join(current)) 195 | 196 | return set(chunks) 197 | 198 | # Turn a sequence of IOBES chunks into single tokens 199 | def iobes_to_spans(sequence, lut, strict_iob2=False): 200 | """ 201 | convert to iobes to span 202 | """ 203 | iobtype = 2 if strict_iob2 else 1 204 | chunks = [] 205 | current = None 206 | 207 | for i, y in enumerate(sequence): 208 | label = lut[y] 209 | 210 | if label.startswith('B-'): 211 | 212 | if current is not None: 213 | chunks.append('@'.join(current)) 214 | current = [label.replace('B-', ''), '%d' % i] 215 | 216 | elif label.startswith('S-'): 217 | 218 | if current is not None: 219 | chunks.append('@'.join(current)) 220 | current = None 221 | base = label.replace('S-', '') 222 | chunks.append('@'.join([base, '%d' % i])) 223 | 224 | elif label.startswith('I-'): 225 | 226 | if current is not None: 227 | base = label.replace('I-', '') 228 | if base == current[0]: 229 | current.append('%d' % i) 230 | else: 231 | chunks.append('@'.join(current)) 232 | if iobtype == 2: 233 | print('Warning') 234 | current = [base, '%d' % i] 235 | 236 | else: 237 | current = [label.replace('I-', ''), '%d' % i] 238 | if iobtype == 2: 239 | print('Warning') 240 | 241 | elif label.startswith('E-'): 242 | 243 | if current is not None: 244 | base = label.replace('E-', '') 245 | if base == current[0]: 246 | current.append('%d' % i) 247 | chunks.append('@'.join(current)) 248 | current = None 249 | else: 250 | chunks.append('@'.join(current)) 251 | if iobtype == 2: 252 | print('Warning') 253 | current = [base, '%d' % i] 254 | chunks.append('@'.join(current)) 255 | current = None 256 | 257 | else: 258 | current = [label.replace('E-', ''), '%d' % i] 259 | if iobtype == 2: 260 | print('Warning') 261 | chunks.append('@'.join(current)) 262 | current = None 263 | else: 264 | if current is not None: 265 | chunks.append('@'.join(current)) 266 | current = None 267 | 268 | if current is not None: 269 | chunks.append('@'.join(current)) 270 | 271 | return set(chunks) 272 | 273 | 274 | def sequence_mask(lens: torch.Tensor, max_len: int = None) -> torch.ByteTensor: 275 | """ 276 | Compute sequence mask. 277 | 278 | Parameters 279 | ---------- 280 | lens : torch.Tensor 281 | Tensor of sequence lengths ``[batch_size]``. 282 | 283 | max_len : int, optional (default: None) 284 | The maximum length (optional). 285 | 286 | Returns 287 | ------- 288 | torch.ByteTensor 289 | Returns a tensor of 1's and 0's of size ``[batch_size x max_len]``. 290 | 291 | """ 292 | batch_size = lens.size(0) 293 | 294 | if max_len is None: 295 | max_len = lens.max().item() 296 | 297 | ranges = torch.arange(0, max_len, device=lens.device).long() 298 | ranges = ranges.unsqueeze(0).expand(batch_size, max_len) 299 | ranges = torch.autograd.Variable(ranges) 300 | 301 | lens_exp = lens.unsqueeze(1).expand_as(ranges) 302 | mask = ranges < lens_exp 303 | 304 | return mask 305 | 306 | 307 | def pad(tensor: torch.Tensor, length: int) -> torch.Tensor: 308 | """Pad a tensor with zeros.""" 309 | return torch.cat([ 310 | tensor, tensor.new(length - tensor.size(0), *tensor.size()[1:]).zero_() 311 | ]) 312 | 313 | 314 | def sort_and_pad(tensors: List[torch.Tensor], 315 | lengths: torch.Tensor) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]: 316 | """ 317 | Sort and pad list of tensors by their lengths and concatenate them. 318 | 319 | Parameters 320 | ---------- 321 | tensors : List[torch.Tensor] 322 | The list of tensors to pad, each has dimension ``[L x *]``, where 323 | ``L`` is the variable length of each tensor. The remaining dimensions 324 | of the tensors must be the same. 325 | 326 | lengths : torch.Tensor 327 | A tensor that holds the length of each tensor in the list. 328 | 329 | Returns 330 | ------- 331 | Tuple[torch.Tensor, torch.Tensor, torch.Tensor] 332 | The first tensor is the result of concatenating the list and has 333 | dimension ``[len(tensors) x max_length x *]``. 334 | The second tensor contains the sorted lengths from the original list. 335 | The third tensor contains the sorted indices from the original list. 336 | 337 | """ 338 | sorted_lens, sorted_idx = lengths.sort(0, descending=True) 339 | max_len = sorted_lens[0].item() 340 | padded = [] 341 | for i in sorted_idx: 342 | padded.append(pad(tensors[i], max_len).unsqueeze(0)) 343 | return torch.cat(padded), sorted_lens, sorted_idx 344 | 345 | 346 | def unsort(tensor: torch.Tensor, indices: torch.Tensor) -> torch.Tensor: 347 | """Unsort a tensor along dimension 0.""" 348 | unsorted = tensor.new_empty(tensor.size()) 349 | unsorted.scatter_(0, indices.unsqueeze(-1).expand_as(tensor), tensor) 350 | return unsorted 351 | 352 | 353 | def assert_equal(tensor_a: torch.Tensor, tensor_b: torch.Tensor) -> None: 354 | """Check if two tensors are equal.""" 355 | assert tensor_a.size() == tensor_b.size() 356 | assert (tensor_a == tensor_b).all().item() == 1 357 | 358 | 359 | 360 | ##### 361 | def iob2(tags): 362 | """ 363 | Check that tags have a valid IOB format. 364 | Tags in IOB1 format are converted to IOB2. 365 | """ 366 | for i, tag in enumerate(tags): 367 | if tag == 'O': 368 | continue 369 | split = tag.split('-') 370 | if len(split) != 2 or split[0] not in ['I', 'B']: 371 | return False 372 | if split[0] == 'B': 373 | continue 374 | elif i == 0 or tags[i - 1] == 'O': # conversion IOB1 to IOB2 375 | tags[i] = 'B' + tag[1:] 376 | elif tags[i - 1][1:] == tag[1:]: 377 | continue 378 | else: # conversion IOB1 to IOB2 379 | tags[i] = 'B' + tag[1:] 380 | return True 381 | 382 | 383 | def iob_iobes(tags): 384 | """ 385 | IOB -> IOBES 386 | """ 387 | new_tags = [] 388 | for i, tag in enumerate(tags): 389 | if tag == 'O' or tag == 'UNK': 390 | new_tags.append(tag) 391 | elif tag.split('-')[0] == 'B': 392 | if i + 1 != len(tags) and \ 393 | tags[i + 1].split('-')[0] == 'I': 394 | new_tags.append(tag) 395 | else: 396 | new_tags.append(tag.replace('B-', 'S-')) 397 | elif tag.split('-')[0] == 'I': 398 | if i + 1 < len(tags) and \ 399 | tags[i + 1].split('-')[0] == 'I': 400 | new_tags.append(tag) 401 | else: 402 | new_tags.append(tag.replace('I-', 'E-')) 403 | else: 404 | raise Exception('Invalid IOB format!') 405 | return new_tags 406 | 407 | 408 | def iobes_iob(tags): 409 | """ 410 | IOBES -> IOB 411 | """ 412 | new_tags = [] 413 | for i, tag in enumerate(tags): 414 | if tag.split('-')[0] == 'B': 415 | new_tags.append(tag) 416 | elif tag.split('-')[0] == 'I': 417 | new_tags.append(tag) 418 | elif tag.split('-')[0] == 'S': 419 | new_tags.append(tag.replace('S-', 'B-')) 420 | elif tag.split('-')[0] == 'E': 421 | new_tags.append(tag.replace('E-', 'I-')) 422 | elif tag.split('-')[0] == 'O': 423 | new_tags.append(tag) 424 | else: 425 | raise Exception('Invalid format!') 426 | return new_tags 427 | 428 | 429 | ### 430 | def normalizeParentheses(line): 431 | words=line.split() 432 | new=[] 433 | for str_word in words: 434 | if str_word == '(': 435 | str_word = '-LRB-' 436 | new.append(str_word) 437 | if str_word == ')': 438 | str_word = '-RRB-' 439 | new.append(str_word) 440 | else: 441 | new.append(str_word) 442 | return " ".join(new) 443 | 444 | def reverse_normalizeParentheses(tokens): 445 | new=[] 446 | for str_word in tokens: 447 | if str_word == '-LRB-': 448 | str_word = '(' 449 | new.append(str_word) 450 | if str_word == '-RRB-': 451 | str_word = ')' 452 | new.append(str_word) 453 | else: 454 | new.append(str_word) 455 | return new 456 | 457 | 458 | def zero_digits(s): 459 | """ 460 | Replace every digit in a string by a zero. 461 | """ 462 | return re.sub('\d', '0', s) 463 | 464 | 465 | # Turn a Unicode string to plain ASCII, thanks to http://stackoverflow.com/a/518232/2809427 466 | import unicodedata 467 | 468 | def unicode_to_ascii(s): 469 | return ''.join( 470 | c for c in unicodedata.normalize('NFD', s) 471 | if unicodedata.category(c) != 'Mn' 472 | ) 473 | # Lowercase, trim, and remove non-letter characters 474 | def normalize_string(s): 475 | s = unicode_to_ascii(s.lower().strip()) 476 | s = re.sub(r"([.!?])", r" \1", s) 477 | s = re.sub(r"[^a-zA-Z.!?]+", r" ", s) 478 | return s 479 | 480 | 481 | 482 | 483 | def nextBatch(X_char, s_lengths,y_one_hots, start_index, batch_size=128): 484 | last_index = start_index + batch_size 485 | X_char_batch = list(X_char[start_index:min(last_index, len(X_char))]) 486 | #y_batch = list(y[start_index:min(last_index, len(X_char))]) 487 | s_lengths_batch=list(s_lengths[start_index:min(last_index, len(s_lengths))]) 488 | y_one_hots_batch = list(y_one_hots[start_index:min(last_index, len(y_one_hots))]) 489 | 490 | if last_index > len(X_char): 491 | left_size = last_index - (len(X_char)) 492 | for i in range(left_size): 493 | index = np.random.randint(len(X_char)) 494 | X_char_batch.append(X_char[index]) 495 | #y_batch.append(y[index]) 496 | s_lengths_batch.append((s_lengths[index])) 497 | y_one_hots_batch.append((y_one_hots[index])) 498 | 499 | 500 | return X_char_batch, s_lengths_batch, y_one_hots_batch 501 | -------------------------------------------------------------------------------- /src/vocab.py: -------------------------------------------------------------------------------- 1 | """ 2 | Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"). 5 | You may not use this file except in compliance with the License. 6 | A copy of the License is located at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | or in the "license" file accompanying this file. This file is distributed 11 | on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | express or implied. See the License for the specific language governing 13 | permissions and limitations under the License. 14 | """ 15 | import string 16 | class Vocab(object): 17 | def __init__(self, filename=None, data=None, lower=False): 18 | self.idx_to_label = {} 19 | self.label_to_idx = {} 20 | self.lower = lower 21 | self.special = [] 22 | 23 | if data is not None: 24 | self.add_specials(data) 25 | 26 | if filename is not None: 27 | self.load_file(filename) 28 | 29 | else: 30 | self.char_vocab() 31 | 32 | 33 | def size(self): 34 | return len(self.idx_to_label) 35 | 36 | def add_specials(self, labels): 37 | """ 38 | Handle the special labels such as , 39 | 40 | :param labels: list of labels 41 | """ 42 | for label in labels: 43 | idx = self.add(label) 44 | self.special += [idx] 45 | 46 | def load_file(self, filename): 47 | """ 48 | :param filename: vocab file 49 | """ 50 | with open(filename, 'r') as infile: 51 | for line in infile: 52 | token = line.rstrip('\n') 53 | self.add(token) 54 | 55 | def char_vocab(self): 56 | for char in string.ascii_letters + string.digits + string.punctuation: 57 | self.add(char) 58 | self.add(char.upper()) 59 | 60 | def vocab_from_dictinay(self,list_of_items): 61 | for l in list_of_items: 62 | self.add(l) 63 | 64 | def add(self, label): 65 | """ 66 | Add the label into vocabulary 67 | 68 | :param label: 69 | :return: index 70 | """ 71 | 72 | label = label.lower() if self.lower else label 73 | 74 | if label in self.label_to_idx: 75 | idx = self.label_to_idx[label] 76 | else: 77 | idx = len(self.idx_to_label) 78 | self.idx_to_label[idx] = label 79 | self.label_to_idx[label] = idx 80 | return idx 81 | 82 | def get_index(self, label, default=None): 83 | """ 84 | :param label: 85 | :param default: 86 | :return: index 87 | """ 88 | label = label.lower() if self.lower else label 89 | if label in self.label_to_idx: 90 | return self.label_to_idx[label] 91 | else: 92 | return default 93 | 94 | def convert_to_idx(self, labels, unk_word): 95 | """ 96 | Convert labels into indices. 97 | If a label is not in vocabulary, return unknown word index 98 | 99 | :param labels: list of labels 100 | :param unk_word: unknown word 101 | :return: list of indices 102 | """ 103 | vec = [] 104 | unk = self.get_index(unk_word) 105 | vec += [self.get_index(label, default=unk) for label in labels] 106 | return vec 107 | -------------------------------------------------------------------------------- /src/weight_init.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding:UTF-8 -*- 3 | 4 | import torch 5 | import torch.nn as nn 6 | import torch.nn.init as init 7 | 8 | 9 | def weight_init(m): 10 | ''' 11 | Usage: 12 | model = Model() 13 | model.apply(weight_init) 14 | ''' 15 | if isinstance(m, nn.Conv1d): 16 | init.normal_(m.weight.data) 17 | if m.bias is not None: 18 | init.normal_(m.bias.data) 19 | elif isinstance(m, nn.Conv2d): 20 | init.xavier_normal_(m.weight.data) 21 | if m.bias is not None: 22 | init.normal_(m.bias.data) 23 | elif isinstance(m, nn.Conv3d): 24 | init.xavier_normal_(m.weight.data) 25 | if m.bias is not None: 26 | init.normal_(m.bias.data) 27 | elif isinstance(m, nn.ConvTranspose1d): 28 | init.normal_(m.weight.data) 29 | if m.bias is not None: 30 | init.normal_(m.bias.data) 31 | elif isinstance(m, nn.ConvTranspose2d): 32 | init.xavier_normal_(m.weight.data) 33 | if m.bias is not None: 34 | init.normal_(m.bias.data) 35 | elif isinstance(m, nn.ConvTranspose3d): 36 | init.xavier_normal_(m.weight.data) 37 | if m.bias is not None: 38 | init.normal_(m.bias.data) 39 | elif isinstance(m, nn.BatchNorm1d): 40 | init.normal_(m.weight.data, mean=1, std=0.02) 41 | init.constant_(m.bias.data, 0) 42 | elif isinstance(m, nn.BatchNorm2d): 43 | init.normal_(m.weight.data, mean=1, std=0.02) 44 | init.constant_(m.bias.data, 0) 45 | elif isinstance(m, nn.BatchNorm3d): 46 | init.normal_(m.weight.data, mean=1, std=0.02) 47 | init.constant_(m.bias.data, 0) 48 | elif isinstance(m, nn.Linear): 49 | init.xavier_normal_(m.weight.data) 50 | if m.bias is not None: 51 | init.normal_(m.bias.data) 52 | elif isinstance(m, nn.LSTM): 53 | for param in m.parameters(): 54 | if len(param.shape) >= 2: 55 | init.orthogonal_(param.data) 56 | else: 57 | init.normal_(param.data) 58 | elif isinstance(m, nn.LSTMCell): 59 | for param in m.parameters(): 60 | if len(param.shape) >= 2: 61 | init.orthogonal_(param.data) 62 | else: 63 | init.normal_(param.data) 64 | elif isinstance(m, nn.GRU): 65 | for param in m.parameters(): 66 | if len(param.shape) >= 2: 67 | init.orthogonal_(param.data) 68 | else: 69 | init.normal_(param.data) 70 | elif isinstance(m, nn.GRUCell): 71 | for param in m.parameters(): 72 | if len(param.shape) >= 2: 73 | init.orthogonal_(param.data) 74 | else: 75 | init.normal_(param.data) 76 | --------------------------------------------------------------------------------