Làm thế nào để bạn sắp xếp các câu trong python?

Bằng cách đọc phần này, bạn sẽ học cách sắp xếp các câu song song từ hai tệp đơn ngữ (các câu được sắp xếp nhưng không được sắp xếp đúng cách). Giả sử bạn có những câu tiếng Anh sau (lấy từ bản dịch tiếng Anh cuốn The Metamorphosis của Franz Kafka)

One morning, as Gregor Samsa was waking up from anxious dreams, he discovered that in bed he had been changed into a monstrous verminous bug.He lay on his armour-hard back and saw, as he lifted his head up a little, his brown, arched abdomen divided up into rigid bow-like sections.From this height the blanket, just about ready to slide off completely, could hardly stay in place.His numerous legs, pitifully thin in comparison to the rest of his circumference, flickered helplessly before his eyes."What's happened to me," he thought.It was no dream.

và các câu tiếng Ý tương ứng như sau

Gregorio Samsa, svegliandosi un mattino da sogni agitati, si trovòtrasformato, nel suo letto, in un enorme insetto immondo.Giacevasulla schiena, dura come una corazza e, sollevando un po' latesta, vide un addome arcuato, scuro, attraversato da numerosenervature.La coperta, in equilibrio sulla sua punta, minacciavadi cadere da un momento all'altro; mentre le numerose zampe,pietosamente sottili rispetto alla sua mole, gli ondeggiavanoconfusamente davanti agli occhi."Che mi è successo?" pensò.Non era un sogno.La sua camera, unavera camera per esseri umani, anche se un po' piccola, stava benferma e tranquilla tra le sue quattro note pareti.

Lưu ý rằng cả câu tiếng Anh và tiếng Ý không được căn chỉnh theo từng dòng do bản dịch sử dụng dấu chấm phẩy (;) để kết hợp hai câu thành một

Do đó, tập dữ liệu này không thể sử dụng được nếu bạn có ý định đào tạo một mô hình dịch máy vì các câu đã dịch bị lệch bởi một dòng. Trong các trường hợp bình thường, bạn luôn có thể sửa nó theo cách thủ công nhưng nó có thể quá tải đối với kho ngữ liệu lớn được tính bằng hàng triệu câu

Hãy khám phá cách bạn có thể tạo một tập hợp con của tập dữ liệu gốc với các câu được căn chỉnh thông qua gói Python có tên là Bleualign

chỉnh nha

Gói Python này giúp căn chỉnh và ghép nối văn bản nguồn và văn bản đích đã dịch của nó ở cấp độ câu. Tuy nhiên, nó yêu cầu văn bản nguồn phải được dịch tự động trước để so sánh với văn bản dịch. Ngoài ra, các câu không được xáo trộn và theo thứ tự

Cài đặt

Bạn nên thiết lập một môi trường ảo trước khi tiếp tục. Kích hoạt nó và chạy lệnh sau để cài đặt qua

pip install git+https://github.com/rsennrich/Bleualign.git
2

pip install git+https://github.com/rsennrich/Bleualign.git

Bước tiếp theo là sao chép các tệp sau trong thư mục của bạn

  • lệnh_utils. py. mô-đun tiện ích để phân tích đối số đầu vào từ dòng lệnh
  • căn chỉnh màu xanh. py. tập lệnh chính để thực hiện căn chỉnh câu

Ý tưởng

Trước đó, hãy khám phá quy trình cơ bản để thực hiện một lần căn chỉnh câu. Nó hoạt động như sau

  1. Dịch văn bản nguồn bằng bất kỳ API dịch máy nào (Google Dịch, v.v. ). Văn bản dịch phải tương ứng với văn bản gốc từng dòng. Không được có bất kỳ ngắt dòng hoặc dòng trống nào trong cả hai tệp
  2. Chạy tập lệnh để tính toán độ tương tự (BLEU đã sửa đổi) giữa văn bản đích và văn bản nguồn được dịch tự động
  3. Hệ thống sẽ sắp xếp các câu dựa trên điểm tương đồng

Bleualign cũng hoạt động nếu bạn dịch cả văn bản nguồn và văn bản đích. Sau đó, nó sẽ chỉ lấy giao điểm của cả hai kết quả làm đầu ra cuối cùng. Điều này cung cấp sự sắp xếp chất lượng cao

tập dữ liệu

Với mục đích thử nghiệm, tôi đã trích xuất văn bản từ một cuốn tiểu thuyết và chia nó thành các câu thông qua biểu thức chính quy. Tập dữ liệu cuối cùng bao gồm các dòng số sau

  • câu nguồn tiếng anh. 6.149 dòng
  • câu mục tiêu Ý. 5,579 dòng

Sau đó mình dịch nội dung qua Google Translate (số dòng phải giống câu nguồn hoặc câu đích)

  • Các câu nguồn đã dịch. 6.149 dòng
  • Dịch câu mục tiêu. 5,579 dòng

Sắp xếp câu

Giả sử rằng tập dữ liệu (nguồn, đích, nguồn đã dịch) nằm trong cùng thư mục với tập lệnh

pip install git+https://github.com/rsennrich/Bleualign.git
3, hãy chạy tập lệnh sau để bắt đầu quá trình căn chỉnh câu

python bleualign.py -s sourcetext.txt -t targettext.txt --srctotarget sourcetranslation.txt --targettosrc targettranslation.txt -o outputfile

Nó chấp nhận các đối số sau

  • Gregorio Samsa, svegliandosi un mattino da sogni agitati, si trovòtrasformato, nel suo letto, in un enorme insetto immondo.Giacevasulla schiena, dura come una corazza e, sollevando un po' latesta, vide un addome arcuato, scuro, attraversato da numerosenervature.La coperta, in equilibrio sulla sua punta, minacciavadi cadere da un momento all'altro; mentre le numerose zampe,pietosamente sottili rispetto alla sua mole, gli ondeggiavanoconfusamente davanti agli occhi."Che mi è successo?" pensò.Non era un sogno.La sua camera, unavera camera per esseri umani, anche se un po' piccola, stava benferma e tranquilla tra le sue quattro note pareti.
    0. đường dẫn tệp nguồn
  • Gregorio Samsa, svegliandosi un mattino da sogni agitati, si trovòtrasformato, nel suo letto, in un enorme insetto immondo.Giacevasulla schiena, dura come una corazza e, sollevando un po' latesta, vide un addome arcuato, scuro, attraversato da numerosenervature.La coperta, in equilibrio sulla sua punta, minacciavadi cadere da un momento all'altro; mentre le numerose zampe,pietosamente sottili rispetto alla sua mole, gli ondeggiavanoconfusamente davanti agli occhi."Che mi è successo?" pensò.Non era un sogno.La sua camera, unavera camera per esseri umani, anche se un po' piccola, stava benferma e tranquilla tra le sue quattro note pareti.
    1. đường dẫn tệp đích
  • Gregorio Samsa, svegliandosi un mattino da sogni agitati, si trovòtrasformato, nel suo letto, in un enorme insetto immondo.Giacevasulla schiena, dura come una corazza e, sollevando un po' latesta, vide un addome arcuato, scuro, attraversato da numerosenervature.La coperta, in equilibrio sulla sua punta, minacciavadi cadere da un momento all'altro; mentre le numerose zampe,pietosamente sottili rispetto alla sua mole, gli ondeggiavanoconfusamente davanti agli occhi."Che mi è successo?" pensò.Non era un sogno.La sua camera, unavera camera per esseri umani, anche se un po' piccola, stava benferma e tranquilla tra le sue quattro note pareti.
    2. đường dẫn tệp nguồn đã dịch
  • Gregorio Samsa, svegliandosi un mattino da sogni agitati, si trovòtrasformato, nel suo letto, in un enorme insetto immondo.Giacevasulla schiena, dura come una corazza e, sollevando un po' latesta, vide un addome arcuato, scuro, attraversato da numerosenervature.La coperta, in equilibrio sulla sua punta, minacciavadi cadere da un momento all'altro; mentre le numerose zampe,pietosamente sottili rispetto alla sua mole, gli ondeggiavanoconfusamente davanti agli occhi."Che mi è successo?" pensò.Non era un sogno.La sua camera, unavera camera per esseri umani, anche se un po' piccola, stava benferma e tranquilla tra le sue quattro note pareti.
    3. đường dẫn tệp mục tiêu đã dịch (tùy chọn)
  • Gregorio Samsa, svegliandosi un mattino da sogni agitati, si trovòtrasformato, nel suo letto, in un enorme insetto immondo.Giacevasulla schiena, dura come una corazza e, sollevando un po' latesta, vide un addome arcuato, scuro, attraversato da numerosenervature.La coperta, in equilibrio sulla sua punta, minacciavadi cadere da un momento all'altro; mentre le numerose zampe,pietosamente sottili rispetto alla sua mole, gli ondeggiavanoconfusamente davanti agli occhi."Che mi è successo?" pensò.Non era un sogno.La sua camera, unavera camera per esseri umani, anche se un po' piccola, stava benferma e tranquilla tra le sue quattro note pareti.
    4. tiền tố tập tin đầu ra

Để có độ chính xác cao hơn, bạn phải dịch văn bản đích và thay vào đó thực hiện lệnh sau

python bleualign.py -s sourcetext.txt -t targettext.txt --srctotarget sourcetranslation.txt --targettosrc targettranslation.txt -o outputfile

Bạn sẽ thấy đầu ra sau trên thiết bị đầu cuối của mình

Gregorio Samsa, svegliandosi un mattino da sogni agitati, si trovòtrasformato, nel suo letto, in un enorme insetto immondo.Giacevasulla schiena, dura come una corazza e, sollevando un po' latesta, vide un addome arcuato, scuro, attraversato da numerosenervature.La coperta, in equilibrio sulla sua punta, minacciavadi cadere da un momento all'altro; mentre le numerose zampe,pietosamente sottili rispetto alla sua mole, gli ondeggiavanoconfusamente davanti agli occhi."Che mi è successo?" pensò.Non era un sogno.La sua camera, unavera camera per esseri umani, anche se un po' piccola, stava benferma e tranquilla tra le sue quattro note pareti.
0Kết quả

Bên cạnh đó, nó sẽ tạo thêm hai tệp dựa trên tiền tố mà bạn đã đặt

  • Gregorio Samsa, svegliandosi un mattino da sogni agitati, si trovòtrasformato, nel suo letto, in un enorme insetto immondo.Giacevasulla schiena, dura come una corazza e, sollevando un po' latesta, vide un addome arcuato, scuro, attraversato da numerosenervature.La coperta, in equilibrio sulla sua punta, minacciavadi cadere da un momento all'altro; mentre le numerose zampe,pietosamente sottili rispetto alla sua mole, gli ondeggiavanoconfusamente davanti agli occhi."Che mi è successo?" pensò.Non era un sogno.La sua camera, unavera camera per esseri umani, anche se un po' piccola, stava benferma e tranquilla tra le sue quattro note pareti.
    5. xuất văn bản nguồn sau khi căn chỉnh câu
  • Gregorio Samsa, svegliandosi un mattino da sogni agitati, si trovòtrasformato, nel suo letto, in un enorme insetto immondo.Giacevasulla schiena, dura come una corazza e, sollevando un po' latesta, vide un addome arcuato, scuro, attraversato da numerosenervature.La coperta, in equilibrio sulla sua punta, minacciavadi cadere da un momento all'altro; mentre le numerose zampe,pietosamente sottili rispetto alla sua mole, gli ondeggiavanoconfusamente davanti agli occhi."Che mi è successo?" pensò.Non era un sogno.La sua camera, unavera camera per esseri umani, anche se un po' piccola, stava benferma e tranquilla tra le sue quattro note pareti.
    6. xuất văn bản đích sau khi căn chỉnh câu

Kết quả không hoàn hảo nhưng đủ tốt như bộ dữ liệu song song ban đầu. Trong trường hợp này, tập lệnh đã căn chỉnh 4442 dòng câu song song chỉ trong vài giây (bỏ qua thời gian dịch câu nguồn và câu đích). Hãy tưởng tượng lượng thời gian cần thiết nếu bạn tự căn chỉnh nó theo cách thủ công. Tất cả những gì bạn cần làm là xác minh và thực hiện một số thao tác cuối cùng trên đầu ra để đảm bảo bộ dữ liệu song song chất lượng cho mô hình dịch máy của bạn

Thuật toán không hoạt động thực sự tốt khi các câu ngắn không được chia nhỏ đúng cách. Ví dụ: vấn đề sau xuất hiện

Gregorio Samsa, svegliandosi un mattino da sogni agitati, si trovòtrasformato, nel suo letto, in un enorme insetto immondo.Giacevasulla schiena, dura come una corazza e, sollevando un po' latesta, vide un addome arcuato, scuro, attraversato da numerosenervature.La coperta, in equilibrio sulla sua punta, minacciavadi cadere da un momento all'altro; mentre le numerose zampe,pietosamente sottili rispetto alla sua mole, gli ondeggiavanoconfusamente davanti agli occhi."Che mi è successo?" pensò.Non era un sogno.La sua camera, unavera camera per esseri umani, anche se un po' piccola, stava benferma e tranquilla tra le sue quattro note pareti.
3Chế độ hàng loạt

Ngoài ra còn có một tập lệnh xử lý các tệp theo lô. Giả sử rằng bạn có những điều sau đây

  • Gregorio Samsa, svegliandosi un mattino da sogni agitati, si trovòtrasformato, nel suo letto, in un enorme insetto immondo.Giacevasulla schiena, dura come una corazza e, sollevando un po' latesta, vide un addome arcuato, scuro, attraversato da numerosenervature.La coperta, in equilibrio sulla sua punta, minacciavadi cadere da un momento all'altro; mentre le numerose zampe,pietosamente sottili rispetto alla sua mole, gli ondeggiavanoconfusamente davanti agli occhi."Che mi è successo?" pensò.Non era un sogno.La sua camera, unavera camera per esseri umani, anche se un po' piccola, stava benferma e tranquilla tra le sue quattro note pareti.
    7. một thư mục có tên chứa tất cả tập dữ liệu
  • Gregorio Samsa, svegliandosi un mattino da sogni agitati, si trovòtrasformato, nel suo letto, in un enorme insetto immondo.Giacevasulla schiena, dura come una corazza e, sollevando un po' latesta, vide un addome arcuato, scuro, attraversato da numerosenervature.La coperta, in equilibrio sulla sua punta, minacciavadi cadere da un momento all'altro; mentre le numerose zampe,pietosamente sottili rispetto alla sua mole, gli ondeggiavanoconfusamente davanti agli occhi."Che mi è successo?" pensò.Non era un sogno.La sua camera, unavera camera per esseri umani, anche se un po' piccola, stava benferma e tranquilla tra le sue quattro note pareti.
    8. tập tin nguồn
  • Gregorio Samsa, svegliandosi un mattino da sogni agitati, si trovòtrasformato, nel suo letto, in un enorme insetto immondo.Giacevasulla schiena, dura come una corazza e, sollevando un po' latesta, vide un addome arcuato, scuro, attraversato da numerosenervature.La coperta, in equilibrio sulla sua punta, minacciavadi cadere da un momento all'altro; mentre le numerose zampe,pietosamente sottili rispetto alla sua mole, gli ondeggiavanoconfusamente davanti agli occhi."Che mi è successo?" pensò.Non era un sogno.La sua camera, unavera camera per esseri umani, anche se un po' piccola, stava benferma e tranquilla tra le sue quattro note pareti.
    9. tập tin mục tiêu
  • pip install git+https://github.com/rsennrich/Bleualign.git
    0. tập tin nguồn đã dịch
  • pip install git+https://github.com/rsennrich/Bleualign.git
    1. tập tin nguồn
  • pip install git+https://github.com/rsennrich/Bleualign.git
    2. tập tin mục tiêu
  • pip install git+https://github.com/rsennrich/Bleualign.git
    3. tập tin nguồn đã dịch

Đơn giản chỉ cần chạy lệnh sau

pip install git+https://github.com/rsennrich/Bleualign.git
1

Nó sẽ tạo các tệp sau dưới dạng đầu ra

  • 0. vi. thẳng hàng
  • 0. nó. thẳng hàng
  • 1. vi. thẳng hàng
  • 1. nó. thẳng hàng
ghi chú

Một nhược điểm lớn là bạn cần có bản dịch của câu gốc trước khi có thể thực hiện căn chỉnh câu. Ngoài việc thực hiện dịch tự động bằng API bên ngoài, chẳng hạn như Google Dịch, bạn luôn có thể đào tạo bản dịch máy đơn giản bằng bộ dữ liệu nguồn mở để hỗ trợ bản dịch ban đầu

Để biết thêm thông tin về thuật toán, vui lòng đọc các bài viết sau

Rico Sennrich, Martin Volk (2010). Căn chỉnh câu dựa trên MT cho các văn bản song song do OCR tạo. Trong. Kỷ yếu của AMTA 2010, Denver, Colorado

Rico Sennrich; . Liên kết câu lặp lại, dựa trên MT của các văn bản song song. Trong. NODALIDA 2011, Hội nghị Ngôn ngữ học Tính toán Bắc Âu, Riga

Phần kết luận

Hãy tóm tắt lại những gì bạn đã học được ngày hôm nay

Bài viết này bắt đầu với một tuyên bố vấn đề đơn giản làm nổi bật vấn đề gặp phải khi xây dựng kho ngữ liệu song song cho mô hình dịch máy

Nó chuyển sang các bước cài đặt và chuẩn bị dữ liệu yêu cầu các câu nguồn phải được dịch trước

Sau đó, nó khám phá các khái niệm cơ bản đằng sau Bleualign tính toán độ tương tự (BLEU đã sửa đổi) giữa câu đích và câu nguồn đã dịch

Cuối cùng, nó đề cập đến lệnh ví dụ và kết quả của việc liên kết câu. Ngoài ra, Bleualign hỗ trợ xử lý các tệp theo lô thông qua một trong các tập lệnh của nó