Bởi Mahir Uysal

Cách xây dựng AI đàm thoại tiên tiến với Học chuyển giao

Vài năm trước, việc tạo một chatbot - như bị giới hạn khi họ quay lại - có thể mất vài tháng 🗓, từ việc thiết kế các quy tắc đến thực sự viết hàng ngàn câu trả lời để bao quát một số chủ đề của cuộc trò chuyện.

Với những tiến bộ gần đây trong việc học sâu cho NLP, giờ đây chúng ta có thể thoát khỏi công việc nhỏ nhặt này và xây dựng AI đàm thoại mạnh mẽ hơn nhiều chỉ trong vài giờ như bạn sẽ thấy trong hướng dẫn này.

Chúng tôi đã thiết lập một bản demo chạy mô hình đã được sàng lọc mà chúng tôi sẽ xây dựng cùng nhau trong hướng dẫn này tại confai.huggingface.co. Hãy chắc chắn để kiểm tra xem nó ra!
Bản demo trực tuyến của mô hình đã được sàng lọc mà chúng tôi sẽ xây dựng trong hướng dẫn này tại convai.huggingface.co. Các gợi ý của NỀN TẢNG (phía dưới) cũng được cung cấp bởi mô hình đặt chính nó vào vị trí của người dùng.

Đây là những gì chúng ta sẽ học và chơi với ngày hôm nay:

  • Cách bạn có thể sử dụng Transfer Learning để xây dựng một tác nhân hội thoại tiên tiến dựa trên các mô hình ngôn ngữ Biến áp OpenAI GPT và GPT-2,
  • Cách bạn có thể tái tạo mô hình mà chúng tôi đã sử dụng trong cuộc thi đối thoại NeurIPS 2018 ConvAI2 đã giành chiến thắng theo dõi số liệu tự động,
  • Cách chúng tôi chắt lọc 3k + dòng mã cạnh tranh trong ít hơn 250 dòng mã đào tạo đã nhận xét (với các tùy chọn phân tán & FP16!) Và
  • Làm thế nào bạn có thể đào tạo mô hình này với giá dưới 20 đô la trên một ví dụ trên đám mây hoặc chỉ sử dụng mô hình được đào tạo sẵn có nguồn mở của chúng tôi.
Cùng với bài đăng này, chúng tôi đã phát hành một cơ sở mã sạch và nhận xét với một mô hình được sàng lọc! Kiểm tra repo Github tại đây

Câu chuyện của bài đăng này đã bắt đầu một vài tháng trước tại Montreal nơi Ôm mặt đã hoàn thành lần đầu tiên trong bản nhạc tự động của Thử thách trí thông minh đàm thoại 2 (ConvAI2), một cuộc thi đối thoại tại NeurIPS 2018.

Nước sốt bí mật của chúng tôi là một mô hình ngôn ngữ được đào tạo trước quy mô lớn, OpenAI GPT, kết hợp với kỹ thuật tinh chỉnh Học chuyển.

Với tốc độ nhanh chóng của cuộc thi, chúng tôi đã kết thúc với hơn 3k dòng mã khám phá nhiều biến thể đào tạo và kiến ​​trúc.

Rõ ràng, xuất bản mã thô như vậy sẽ không công bằng.

Trong thời gian đó, chúng tôi đã bắt đầu xây dựng và nguồn mở một kho lưu trữ các mô hình học chuyển đổi được gọi là pytorch-Pretrained-BERT, cuối cùng đã được tải xuống hơn 150 000 lần và cung cấp triển khai các mô hình ngôn ngữ quy mô lớn như OpenAI GPT và đó là sự kế thừa GPT-2

Vài tuần trước, tôi đã quyết định tính lại mã cạnh tranh của chúng tôi trong một cơ sở mã sạch và được nhận xét được xây dựng trên đỉnh pytorch-Pretrained-BERT và để viết một bài đăng blog chi tiết giải thích cách tiếp cận và mã của chúng tôi.

Vì vậy, ở đây chúng tôi, hãy để Lặn lặn trong

Một AI có cá tính

Chúng tôi sẽ xây dựng một AI trò chuyện với một nhân cách.

Tác nhân hộp thoại của chúng tôi sẽ có một cơ sở kiến ​​thức để lưu trữ một vài câu mô tả đó là ai (persona) và lịch sử hộp thoại. Khi một cách nói mới sẽ được nhận từ người dùng, tác nhân sẽ kết hợp nội dung của cơ sở kiến ​​thức này với cách nói mới nhận được để tạo ra phản hồi.

Đây là sơ đồ chung:

Khi chúng tôi đào tạo một tác nhân hội thoại dựa trên học tập sâu, theo kiểu kết thúc, chúng tôi đang phải đối mặt với một vấn đề lớn:

Các bộ dữ liệu hộp thoại rất nhỏ và khó có thể học đủ về ngôn ngữ và ý thức chung từ chúng để có thể tạo ra các phản hồi trôi chảy và có liên quan.

Một số phương pháp cố gắng giải quyết điều này bằng cách lọc đầu ra của mô hình để cải thiện chất lượng bằng cách sử dụng tìm kiếm chùm tia thông minh. Ở đây, chúng tôi sẽ đi một con đường khác thu thập được sự quan tâm rất lớn trong những tháng qua: Học chuyển giao.

Ý tưởng đằng sau phương pháp này khá đơn giản:

  • bắt đầu bằng cách tạo ra một mô hình ngôn ngữ trên một khối văn bản rất lớn để có thể tạo ra các đoạn văn bản liền mạch dài,
  • tinh chỉnh mô hình ngôn ngữ này để điều chỉnh nó cho hộp thoại end-task: của chúng tôi.

Tiền xử lý một mô hình ngôn ngữ là một hoạt động đắt tiền vì vậy nó thường tốt hơn để bắt đầu từ một mô hình đã được sơ chế và có nguồn mở.

Điều gì sẽ là một mô hình tốt trước cho mục đích của chúng tôi?

Càng lớn càng tốt, nhưng chúng ta cũng cần một mô hình có thể tạo văn bản. Mô hình NLP được sử dụng phổ biến nhất, BERT, chỉ được xử lý trước trên các câu đầy đủ và không thể hoàn thành các câu chưa hoàn thành. Hai mô hình khác, nguồn mở của OpenAI, thú vị hơn cho trường hợp sử dụng của chúng tôi: GPT & GPT-2.

Hãy để chúng tôi có một cái nhìn nhanh về họ

Các mô hình OpenAI GPT và GPT-2

Trong năm 2018 và 2019, Alec Radford, Jeffrey Wu và các đồng nghiệp của họ tại OpenAI có hai mô hình ngôn ngữ được đào tạo trên một lượng dữ liệu rất lớn: GPT và GPT-2 (trong đó GPT là viết tắt của Biến thế tiền chế tạo).

Một bộ giải mã / Biến áp nhân quả tham dự vào ngữ cảnh bên trái để tạo ra các từ tiếp theo

GPT và GPT-2 là hai mô hình ngôn ngữ dựa trên biến áp rất giống nhau. Những mô hình này được gọi là mô hình giải mã hoặc mô hình nhân quả có nghĩa là chúng sử dụng bối cảnh bên trái để dự đoán từ tiếp theo (xem hình bên trái).

Nhiều bài báo và bài đăng trên blog mô tả các mô hình Transformers và cách chúng sử dụng các cơ chế chú ý để xử lý các đầu vào tuần tự để tôi giành được thời gian trình bày chúng một cách chi tiết. Một vài gợi ý nếu bạn không quen thuộc với các mô hình này: Các slide EMNLP của Emma Strubell là những mục yêu thích cá nhân của tôi và Jay Alammar trong Minh họa Minh họa Transformer là một giới thiệu rất chi tiết.

Với mục đích của chúng tôi, một mô hình ngôn ngữ sẽ chỉ là một mô hình lấy đầu vào là một chuỗi các mã thông báo và tạo phân phối xác suất theo từ vựng cho mã thông báo tiếp theo sau chuỗi đầu vào. Các mô hình ngôn ngữ thường được đào tạo theo kiểu song song, như được minh họa trên hình trên, bằng cách dự đoán mã thông báo theo sau mỗi mã thông báo theo một chuỗi đầu vào dài.

Tiền xử lý các mô hình này trên một kho văn bản lớn là một hoạt động tốn kém, vì vậy chúng tôi sẽ bắt đầu từ một mô hình và mã thông báo do OpenAI tạo ra. Mã thông báo sẽ đảm nhiệm việc phân tách một chuỗi đầu vào trong các mã thông báo (từ / từ phụ) và chuyển đổi các mã thông báo này trong các chỉ số số chính xác của từ vựng mô hình.

Trong mô hình pytorch-Pretrained-BERT OpenAI GPT và bộ mã thông báo của nó có thể dễ dàng được tạo và tải từ điểm kiểm tra sơ bộ như thế này:

Bạn có thể nhận thấy chúng tôi đã tải một mô hình có tên OpenAI GPT Double Heads Model, nghe có vẻ phức tạp hơn một chút so với mô hình ngôn ngữ mà chúng tôi vừa nói vừa nói và bạn đúng!

Điều này là do chúng ta cần điều chỉnh mô hình của mình thành hộp thoại. Hãy để chúng tôi thấy điều này diễn ra như thế nào!

Thích ứng mô hình ngôn ngữ với tác vụ hộp thoại

Mô hình ngôn ngữ của chúng tôi được đào tạo với một đầu vào duy nhất: một chuỗi các từ.

Nhưng như chúng ta đã thấy trước đó, trong một cài đặt hộp thoại, mô hình của chúng ta sẽ phải sử dụng một số loại bối cảnh để tạo ra một chuỗi đầu ra:

  • một hoặc một vài câu persona,
  • lịch sử của hộp thoại với ít nhất là phát ngôn cuối cùng từ người dùng,
  • các mã thông báo của chuỗi đầu ra đã được tạo kể từ khi chúng tôi tạo ra chuỗi đầu ra từng chữ.
Làm thế nào chúng ta có thể xây dựng một đầu vào cho mô hình của mình từ các bối cảnh khác nhau này?

Một câu trả lời đơn giản chỉ là ghép các phân đoạn ngữ cảnh theo một chuỗi duy nhất, đặt câu trả lời ở cuối. Sau đó, chúng tôi có thể tạo hoàn thành mã thông báo trả lời bằng mã thông báo bằng cách tiếp tục chuỗi:

Trình tự đầu vào: nối từ persona (màu xanh), lịch sử (màu hồng) và trả lời (màu xanh lá cây) với dấu phân cách (màu hồng nhạt). Ở đây chúng tôi tạo ra từ bạn bạn để hoàn thành trả lời.

Có hai vấn đề với thiết lập đơn giản này:

  • Máy biến áp của chúng tôi bị mù màu! Các mã thông báo phân cách chỉ cung cấp cho nó một ý tưởng yếu về phân đoạn mà mỗi từ thuộc về. Ví dụ: từ "NY NYC" được chỉ định bằng màu xanh lam (persona) trong hình minh họa của chúng tôi nhưng mô hình của chúng tôi sẽ gặp khó khăn khi trích xuất thông tin này từ các dấu phân cách: chúng ta nên thêm thông tin về các phân đoạn.
  • Máy biến áp của chúng tôi bị mù vị trí! Chú ý là một sản phẩm chấm đối xứng, vì vậy chúng ta nên thêm thông tin vị trí cho mỗi mã thông báo.

Một cách dễ dàng để thêm thông tin này là xây dựng ba chuỗi đầu vào song song cho từ, vị trí và phân đoạn và kết hợp chúng theo một chuỗi duy nhất, tóm tắt ba loại nhúng: từ, vị trí và nhúng phân đoạn:

Tổng hợp ba loại nhúng đầu vào cho biết các từ (màu xám), vị trí (độ dốc) và phân đoạn (màu xanh / hồng / xanh)

Làm thế nào để chúng tôi thực hiện điều này?

Đầu tiên, chúng tôi sẽ thêm các mã thông báo đặc biệt vào từ vựng của chúng tôi cho các dấu phân cách và chỉ báo phân đoạn. Các mã thông báo này không phải là một phần của mô hình tiền xử lý mô hình của chúng tôi vì vậy chúng tôi sẽ cần tạo và đào tạo các nhúng mới cho chúng.

Việc thêm các mã thông báo đặc biệt và các nhúng mới vào từ vựng / mô hình khá đơn giản với các lớp BERT pytorch-Pretrained-BERT. Hãy để thêm 5 mã thông báo đặc biệt vào từ vựng tokenizer của chúng tôi và mô hình nhúng nhúng của mô hình:

Các phương thức mã thông báo đặc biệt này tương ứng thêm năm mã thông báo đặc biệt của chúng tôi vào từ vựng của mã thông báo và tạo năm lần nhúng bổ sung trong mô hình.

Bây giờ chúng tôi có tất cả những gì chúng tôi cần để xây dựng chuỗi đầu vào của chúng tôi từ nhân cách, lịch sử và bắt đầu bối cảnh trả lời. Đây là một ví dụ đơn giản:

Mất nhiều nhiệm vụ

Bây giờ chúng tôi đã khởi tạo mô hình được sàng lọc trước và xây dựng các đầu vào đào tạo của mình, tất cả những gì còn lại là chọn một mất mát để tối ưu hóa trong quá trình tinh chỉnh.

Chúng tôi sẽ sử dụng mất nhiều tác vụ kết hợp mô hình ngôn ngữ với mục tiêu dự đoán câu tiếp theo.
Mục tiêu dự đoán câu tiếp theo là một phần của tiền xử lý BERT. Nó bao gồm các bộ phân tâm lấy mẫu ngẫu nhiên từ bộ dữ liệu và huấn luyện mô hình để phân biệt xem một chuỗi đầu vào kết thúc bằng một câu trả lời vàng hay một bộ phân tâm. Nó đào tạo mô hình để xem xét các phân khúc toàn cầu có ý nghĩa bên cạnh bối cảnh địa phương.

Bây giờ bạn thấy lý do tại sao chúng tôi tải một mô hình Double Double Head Head. Một đầu sẽ tính toán dự đoán mô hình hóa ngôn ngữ trong khi đầu kia sẽ dự đoán nhãn phân loại câu tiếp theo. Hãy để chúng tôi có một cái nhìn về cách tính toán tổn thất:

Mục tiêu đào tạo đa tác vụ - mô hình được cung cấp hai đầu để dự đoán mô hình ngôn ngữ (màu cam) và phân loại câu tiếp theo (màu xanh)

Tổng thiệt hại sẽ là tổng trọng số của tổn thất mô hình hóa ngôn ngữ và mất dự đoán câu tiếp theo được tính như sau:

  • Mô hình hóa ngôn ngữ: chúng tôi chiếu trạng thái ẩn trên ma trận nhúng từ để nhận nhật ký và áp dụng tổn thất entropy chéo trên phần của mục tiêu tương ứng với câu trả lời vàng (nhãn màu xanh lục trên hình trên).
  • Dự đoán câu tiếp theo: chúng tôi chuyển trạng thái ẩn của mã thông báo cuối cùng (mã thông báo cuối chuỗi) qua lớp tuyến tính để lấy điểm và áp dụng mất entropy chéo để phân loại chính xác câu trả lời vàng giữa các yếu tố gây phân tâm.

Hãy để xem cách chúng ta có thể viết mã này:

Bây giờ chúng tôi có tất cả các đầu vào theo yêu cầu của mô hình của chúng tôi và chúng tôi có thể chạy một lượt chuyển tiếp của mô hình để có được hai tổn thất và tổng tổn thất (dưới dạng tổng trọng số):

Chúng tôi đã sẵn sàng để bắt đầu đào tạo

Đào tạo về bộ dữ liệu hộp thoại

Cuộc thi ConvAI2 đã sử dụng một bộ dữ liệu thú vị được Facebook phát hành năm ngoái: PERSONA-CHAT.

Nó có một bộ dữ liệu khá lớn của hộp thoại (hộp thoại 10k) được tạo bởi các câu cá tính cộng đồng và yêu cầu nhân viên đám đông ghép đôi để trò chuyện trong khi chơi một phần của một nhân vật nhất định (một ví dụ được đưa ra trên hình bên trái).

Bộ dữ liệu này có sẵn ở định dạng văn bản mã thông báo thô trong thư viện Facebook ParlAI đẹp. Để bootstrap bạn, chúng tôi cũng đã tải lên một phiên bản được định dạng JSON mà bạn có thể tải xuống và mã hóa bằng cách sử dụng mã thông báo GPT như thế này:

Phiên bản JSON của PERSONA-CHAT cho phép truy cập nhanh vào tất cả các đầu vào có liên quan để đào tạo mô hình của chúng tôi dưới dạng từ điển danh sách lồng nhau:

Tổ chức phiên bản JSON của PERSONA-CHAT

Sử dụng khung đánh lửa PyTorch tuyệt vời và API mới cho Độ chính xác hỗn hợp tự động (FP16 / 32) do apex NVIDIA NVIDIA cung cấp, chúng tôi có thể chắt lọc hơn 3k dòng mã cạnh tranh trong ít hơn 250 dòng mã đào tạo với các tùy chọn phân tán và FP16!

Chúng tôi đã bao gồm các phần thiết yếu của mã trong các ý chính ở trên vì vậy tôi sẽ chỉ cho bạn đọc mã nhận xét để xem tất cả các mã đó khớp với nhau như thế nào.

Mã đào tạo (train.py) có ở đây ➱

Việc đào tạo mô hình này trên một phiên bản AWS với GPU 8 V100 chỉ mất chưa đầy một giờ (hiện chưa đến 25 đô la trên phiên bản AWS p3.16xlarge lớn nhất) và cho kết quả gần với SOTA thu được trong cuộc thi ConvAI2 với Số lần truy cập @ 1 trên 79, lúng túng 20,5 và F1 là 16,5.

Một vài sự khác biệt giải thích điểm số thấp hơn một chút so với mô hình cạnh tranh của chúng tôi, chúng được trình bày chi tiết trong phần đọc lại của mã repo ở đây và chủ yếu bao gồm điều chỉnh các vị trí nhúng và sử dụng một bộ giải mã khác.

Trò chuyện với Người mẫu - Bộ giải mã

Điều tuyệt vời về các mô hình hộp thoại là bạn có thể nói chuyện với họ

Để tương tác với mô hình của chúng tôi, chúng tôi cần thêm một điều: bộ giải mã sẽ xây dựng các chuỗi đầy đủ từ các dự đoán mã thông báo tiếp theo của mô hình của chúng tôi.

Bây giờ đã có những phát triển rất thú vị về bộ giải mã trong vài tháng qua và tôi muốn trình bày chúng nhanh chóng ở đây để giúp bạn cập nhật.

Hai bộ giải mã phổ biến nhất cho việc tạo ngôn ngữ được sử dụng là giải mã tham lam và tìm kiếm chùm tia.

Tạo một câu từng chữ (nguồn)

Giải mã tham lam là cách đơn giản nhất để tạo câu: tại mỗi bước thời gian, chúng tôi chọn mã thông báo có khả năng tiếp theo theo mô hình cho đến khi chúng tôi đạt được mã thông báo cuối chuỗi. Một rủi ro với việc giải mã tham lam là mã thông báo có xác suất cao có thể bị ẩn sau mã thông báo có xác suất thấp và bị bỏ qua.

Tìm kiếm chùm tia cố gắng giảm thiểu vấn đề này bằng cách duy trì một chùm các chuỗi có thể có mà chúng tôi xây dựng từng từ một. Vào cuối quá trình, chúng tôi chọn câu tốt nhất trong số các chùm. Trong vài năm qua, tìm kiếm chùm tia là thuật toán giải mã tiêu chuẩn cho hầu hết tất cả các tác vụ tạo ngôn ngữ bao gồm cả hộp thoại (xem [1] gần đây).

Tuy nhiên một số phát triển đã xảy ra vào năm 2018 / đầu năm 2019. Đầu tiên, ngày càng có nhiều bằng chứng cho thấy tìm kiếm chùm tia rất nhạy cảm với độ dài của đầu ra và kết quả tốt nhất có thể đạt được khi dự đoán độ dài đầu ra trước khi giải mã ([2, 3] tại EMNLP 2018). Mặc dù điều này có ý nghĩa đối với các tác vụ entropy thấp như dịch thuật trong đó độ dài chuỗi đầu ra có thể được dự đoán đại khái từ đầu vào, có vẻ như tùy ý đối với các tác vụ entropy cao như hộp thoại và tạo câu chuyện trong đó đầu ra có độ dài khác nhau thường có giá trị như nhau.

Song song, ít nhất hai bài báo có ảnh hưởng ([4, 5]) về các nhiệm vụ tạo entropy cao đã được xuất bản trong đó giải mã tham lam / tìm kiếm chùm tia được thay thế bằng cách lấy mẫu từ phân phối mã thông báo tiếp theo ở mỗi bước. Các bài báo này đã sử dụng một biến thể lấy mẫu được gọi là lấy mẫu top-k trong đó mẫu giải mã chỉ từ các mã thông báo có thể xảy ra nhiều nhất (k là siêu tham số).

Viên đá cuối cùng trong xu hướng làm việc gần đây là nghiên cứu được công bố gần đây bởi Ari Holtzman et al. [6] cho thấy rằng sự phân phối các từ trong văn bản được tạo bằng cách sử dụng tìm kiếm chùm và giải mã tham lam rất khác với phân phối từ trong văn bản do con người tạo ra. Rõ ràng, tìm kiếm chùm và giải mã tham lam không thể tái tạo một số khía cạnh phân phối của văn bản con người vì nó cũng đã được ghi nhận trong [7, 8] trong bối cảnh các hệ thống hộp thoại:

Trái: Xác suất được gán cho mã thông báo được tạo bởi con người và tìm kiếm chùm tia bằng GPT-2 (Lưu ý phương sai mạnh trong văn bản của con người không được sao chép bằng tìm kiếm chùm tia). Phải: Phân phối N-gram trong các văn bản do con người và máy tạo ra (Lưu ý sự tách biệt hoàn toàn giữa các phương pháp giải mã tham lam / tìm kiếm chùm và lấy mẫu).

Hiện tại, hai ứng cử viên hứa hẹn nhất để giải mã chùm tìm kiếm / tham lam thành công là lấy mẫu top-k và hạt nhân (hoặc top-p). Nguyên tắc chung của hai phương pháp này là lấy mẫu từ phân phối mã thông báo tiếp theo sau khi đã lọc phân phối này để chỉ giữ các mã thông báo k hàng đầu (top-k) hoặc mã thông báo hàng đầu với xác suất tích lũy ngay trên ngưỡng (hạt nhân / đầu trang p).

Dưới đây là cách chúng ta có thể giải mã bằng cách sử dụng lấy mẫu top-k và / hoặc hạt nhân / top-p:

Bây giờ chúng tôi đã sẵn sàng để nói chuyện với mô hình của chúng tôi

Kịch bản tương tác có ở đây (tương tác) và nếu bạn không muốn chạy kịch bản, bạn cũng có thể chơi với bản demo trực tiếp của chúng tôi ở đây

Dưới đây là một ví dụ về hộp thoại:

Ví dụ sử dụng các tập lệnh tương tác với cài đặt mặc định - Tính cách Bot: Tôi đọc hai mươi cuốn sách mỗi năm. Tôi là một người đóng thế gấp đôi như là công việc thứ hai của tôi. Tôi chỉ ăn kosher. Tôi lớn lên trong một gia đình cha mẹ đơn thân.

Kết luận

Chúng tôi đã đi đến cuối bài này mô tả cách bạn có thể xây dựng một AI đàm thoại hiện đại đơn giản bằng cách sử dụng học chuyển giao và một mô hình ngôn ngữ quy mô lớn như OpenAI GPT.

Như chúng ta đã học ở Ôm mặt, việc đưa AI trò chuyện của bạn lên và chạy nhanh là công thức tốt nhất để thành công vì vậy chúng tôi hy vọng nó sẽ giúp một số bạn làm điều đó!

Hãy chắc chắn kiểm tra bản demo và mã liên quan:

  • bản demo trực tiếp ở đây và
  • mã nguồn mở và các mô hình tiền xử lý ở đây.

Như mọi khi, nếu bạn thích bài đăng này, hãy cho chúng tôi một vài để cho chúng tôi biết và chia sẻ tin tức xung quanh bạn!

Người giới thiệu:

[1] ^ Tầm quan trọng của chiến lược tìm kiếm trong mô hình đối thoại thần kinh của Ilya Kulikov, Alexander H. Miller, Kyunghyun Cho, Jason Weston (http://arxiv.org/abs/1811.00907)

[2] ^ Sửa lỗi thiên vị trong bản dịch máy thần kinh của Kenton Murray, David Chiang (http://arxiv.org/abs/1808.10006)

[3] ^ Phá vỡ lời nguyền tìm kiếm chùm tia: Một nghiên cứu về (Re-) Phương pháp chấm điểm và tiêu chí dừng dịch thuật máy thần kinh của Yilin Yang, Liang Huang, Mingbo Ma (https://arxiv.org/abs/1808.09582)

[4] ^ Tạo câu chuyện thần kinh phân cấp của Angela Fan, Mike Lewis, Yann Dauphin (https://arxiv.org/abs/1805.04833)

[5] ^ Các mô hình ngôn ngữ là những người học đa nhiệm không được giám sát bởi Alec Radford, Jeff Wu, Rewon Child, David Luan, Dario Amodei và Ilya Sutskever (https://openai.com/blog/better-lingu-models/)

[6] ^ Trường hợp tò mò về thoái hóa văn bản thần kinh của Ari Holtzman, Jan Buys, Maxwell Forbes, Yejin Choi (https://arxiv.org/abs/1904.09751)

[7] ^ Lấy và tinh chỉnh: Các mô hình tạo trình tự được cải tiến cho đối thoại của Jason Weston, Emily Dinan, Alexander H. Miller (https://arxiv.org/abs/1808.04776)

[8] ^ Thử thách trí thông minh đàm thoại thứ hai (ConvAI2) của Emily Dinan et al. (https://arxiv.org/abs/1902.00098)