用python处理movie数据集

正文之前的BB时间

因为个人实验需要,要对Cornell Movie Dialogs Corpus进行一些预处理,记录一下处理过程,以后其他类似的数据处理可以借鉴。

我的实验是实现一个主题驱动的自动聊天机器人,Cornell Movie Dialogs Corpus是一个从电影数据中生成的电影对白语料库,包含大概600部电影对白,并且语料中含有电影名、角色、IMDB评分等许多信息。但我的实验中只需要里面的纯对话信息,将每个对话处理成前面几句是对话上下文context、最后一句是对话回复response,并需要替换其中的低频词,将其保存为tfrecord。

语料库中原始文件包含:

  • movie_titles_metadata.txt 包含每部电影标题信息
  • movie_characters_metadata.txt 包含每部电影角色信息
  • movie_lines.txt 每个表达(utterance)的实际文本
  • movie_conversations.txt 对话的结构,用语句ID表示
  • raw_script_urls.txt 原始来源的url
    *具体介绍可见文章http://blog.csdn.net/zdcs/article/details/53465855

我已经用numpy和pandas在jupyter中将上面的文件处理成 convLine.csv 和 lineIndex.csv 两个文件,两个文件格式如下:
convLine.csv 对话文件,每个对话语句line用ID表示:
L1,L2,L3 || L4,L5,L6,L7,L8 || L9,L10,L11 ...
lineIndex.csv 语句文件,每个语句lineID对应的真正的句子:
L1,hello! || L2, how are you? || L3, fine,thank you. ...
(||表示换行)

下面对这两个文件进行处理,正文开始~~

这里是正文

处理数据集的过程有两轮遍历。
第一轮遍历完成文件对齐、分割seq2seq数据集、获得数据集大小和词汇表;
第二轮遍历得到忽略词、获得topic训练数据集以及写入tfrecord。

第一轮遍历

利用lineIndex.csv 文件建立字典。

meta_lineIndex_path = os.path.join(config.data_root, 'lineIndex.csv')
    convline_dict = {}
    with open(meta_lineIndex_path, newline='')as f:
        lineIndex_reader = csv.reader(f)
        for row in lineIndex_reader:
            convline_dict[row[0]] = row[1]

由于数据集中有的的对话比较长、轮数较多,因此进行了采样,将轮次长的对话拆分成几个轮次短的对话,分割次数视长度而定。这里需要注意同一个对话拆分开后,分割数据集时应该分到一起。
采样过程示意:
对话数据
L1, L2, L3, L4, L5, L6, L7, L8
[---对话1---]
[--------对话2-------]
[--------------对话3---------------]

new_max_turn = min(len(row)-1,max_turn)
    assert min_turn <= new_max_turn, "context最小轮数大于最大轮数"
    sampling_count_range = list(map(int, sampling_range.split(',')))
    sample_count_tag = bisect.bisect_left(sampling_count_range, new_max_turn)//获得采样次数
    context_list = list()
    response = list()

    while sample_count_tag != 0:
        context = list()
        context_truns=new_max_turn
        if sample_count_tag > 1:
            while True:
                alternative_context_truns=random.randint(
                    min_turn,
                    new_max_turn
                )
                if alternative_context_truns!=context_truns://防止重复采样
                    context_truns=alternative_context_truns
                    break
        # 处理context
        for turn in row[:context_truns]:
            word_list = word_tokenize(convline_dict[turn])
            context.extend(list(word_list) + [end_of_turn_symbol])
        context_list.append(context)

        # 处理response
        word_list = word_tokenize(convline_dict[row[context_truns]])
        response.append(list(word_list) + [end_of_turn_symbol]) 
        #注意多次采样的context和response分开
        sample_count_tag = sample_count_tag-1

采样后得到了对话的context和response数据,将其分割成训练集、测试集和验证集,更新词汇表。

第二轮遍历

将数据集中的词表word_list转换为idx_list,并添加忽略词symbol。

seq2seq_context = token_manager.translate_word_list_to_idx_list(context_word_list, False)
seq2seq_response = token_manager.translate_word_list_to_idx_list([go_symbol] + response_word_list, False)
topic_context = token_manager.translate_word_list_to_idx_list(context_word_list, True)
topic_response = token_manager.translate_word_list_to_idx_list(response_word_list, True)

写入topic训练数据集以及生成tfrecord文件。
完成!

正文之后再BB两句

整个数据集处理过程还是比较简单的,用到的技巧也不多,以后再有其他实验也算有经验了。
就是一开始采样完分割数据集时,没有注意对同一个对话多次采样获得多个对话应该分割到同一个数据集中,差点造成实验造假。(¦3」∠)。。。还好小H童靴帮我发现了~以后还是要多多注意!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343