Học cách thiết lập và sử dụng LangExtract để trích xuất dữ liệu có cấu trúc và mối quan hệ từ văn bản không cấu trúc, so sánh cách tiếp cận với các thư viện NLP truyền thống.
Trích xuất dữ liệu có cấu trúc từ tài liệu văn bản gây ra nhiều vấn đề lớn cho các nhóm dữ liệu. Biểu thức chính quy dễ hỏng khi định dạng thay đổi, mã phân tích tùy chỉnh bỏ lỡ ngữ cảnh mà con người dễ dàng nắm bắt, và các giải pháp này cần sửa liên tục khi nguồn dữ liệu của bạn thay đổi.
LangExtract giải quyết điều này bằng cách sử dụng các mô hình AI có thể đọc văn bản như con người và theo dõi chính xác nguồn gốc của từng thông tin. Bạn chỉ cần nói cho nó biết dữ liệu bạn muốn bằng những thuật ngữ đơn giản kèm vài ví dụ, và nó sẽ làm phần việc khó là hiểu và trích xuất thông tin đó.
Trong hướng dẫn này, tôi sẽ giải thích từng bước cách thiết lập LangExtract cho nhận dạng thực thể có tên, trích xuất mối quan hệ giữa các thực thể, làm việc với các nhà cung cấp mô hình AI khác nhau, và so sánh cách tiếp cận của LangExtract với các thư viện NLP truyền thống. Bạn cũng sẽ học cách định nghĩa tác vụ trích xuất, cung cấp ví dụ huấn luyện, và xử lý kết quả có cấu trúc cho các quy trình phân tích của bạn.
LangExtract là gì?
LangExtract là một thư viện Python biến văn bản lộn xộn thành dữ liệu có tổ chức bằng cách dùng các mô hình AI. Các công cụ xử lý văn bản cũ dễ bị rối bởi ngữ cảnh — chúng có thể thấy “Apple” và nghĩ đó là trái cây khi bạn đang đọc về công ty công nghệ, hoặc thấy “$500” và gọi đó là giá khi thực ra đó là mã nhân viên. Khớp mẫu cơ bản có thể phát hiện địa chỉ email, nhưng không thể biết “[email protected]” là nhân viên hiện tại hay chỉ là ai đó được nhắc đến trong một email cũ.
Để khắc phục các vấn đề về ngữ cảnh và độ chính xác này, LangExtract mang đến cho bạn:
Theo dõi nguồn — Hiển thị chính xác mỗi mẩu dữ liệu đến từ đâu trong văn bản gốc
Nhiều mô hình AI — Hoạt động vớiOpenAI, Anthropic, Google, và mô hình cục bộ quaOllama
Chia khối thông minh — Chia tài liệu lớn thành các phần và xử lý đồng thời nhiều phần
Nhiều lượt thử — Chạy cùng tác vụ nhiều lần để bắt các thông tin bị bỏ sót
Báo cáo trực quan — Tạo trang HTML nơi bạn có thể nhấp vào dữ liệu để xem nguồn gốc
Các công cụ này phối hợp để thay đổi cách bạn trích xuất thông tin từ văn bản. Thay vì viết các quy tắc phức tạp dễ hỏng, bạn nói cho AI biết mình muốn gì bằng những ví dụ đơn giản. AI đọc văn bản như con người và theo dõi nguồn gốc mọi thứ. Nhờ đó bạn có thể trích xuất thông tin và mối quan hệ phức tạp mà theo cách cũ phải mất hàng trăm dòng mã mới tìm ra.
Khi nào bạn nên dùng LangExtract?
LangExtract phát huy hiệu quả nhất khi bạn cần trích xuất thông tin tùy biến mà các công cụ NLP truyền thống khó xử lý tốt. Nếu bạn làm việc với văn bản theo lĩnh vực chuyên biệt nơi nhận dạng thực thể có tên tiêu chuẩn không đáp ứng, LangExtract cho phép bạn định nghĩa chính xác điều quan trọng với doanh nghiệp mà không cần viết quy tắc phức tạp hay huấn luyện lại mô hình. Nó đặc biệt hữu ích khi bạn cần hiểu ngữ cảnh và mối quan hệ giữa các mẩu thông tin khác nhau, không chỉ tìm các thực thể riêng lẻ.
LangExtract là lựa chọn tốt khi bạn có:
Thực thể theo miền — Thuật ngữ ngành, tên sản phẩm, hoặc danh mục tùy chỉnh mà mô hình tiền huấn luyện không nhận diện
Mối quan hệ phức tạp — Thông tin cần được nhóm lại, như liên kết người với vai trò và thông tin liên hệ của họ
Trích xuất phụ thuộc ngữ cảnh — Khi cùng một đoạn văn có thể mang nghĩa khác nhau tùy thông tin xung quanh
Cần xác minh nguồn — Yêu cầu theo dõi chính xác nguồn gốc của từng mẩu dữ liệu được trích xuất
Loại tài liệu hỗn hợp — Các định dạng khác nhau như email, PDF, và báo cáo cần cách xử lý linh hoạt
Hạn chế về chuyên môn ML — Nhóm muốn trích xuất mạnh mẽ mà không cần kiến thức máy học sâu
Bạn nên cân nhắc công cụ khác nếu đang làm các tác vụ NLP đã thành chuẩn như nhận dạng thực thể có tên cơ bản cho các danh mục phổ biến, cần xử lý cực nhanh các mẫu đơn giản, hoặc có yêu cầu nghiêm ngặt tránh gọi API bên ngoài. Các thư viện truyền thống nhưspaCy vượt trội ở các tác vụ NLP tiêu chuẩn với xử lý khối lượng lớn, trong khi LangExtract tỏa sáng khi bạn cần trích xuất thông minh, tùy biến với độ phức tạp thiết lập tối thiểu.
Thiết lập LangExtract
Trước khi bắt đầu trích xuất dữ liệu, bạn cần cài đặt LangExtract và thiết lập quyền truy cập các mô hình AI. Thư viện hỗ trợ nhiều cách cài đặt và làm việc với các nhà cung cấp AI khác nhau.
Cài đặt
Cài đặt LangExtract bằng pip hoặc uv. Với tích hợpOpenAI, hãy dùng gói extras:
# Using pip
pip install langextract[openai]# Using uv
uv add langextract[openai]Được hỗ trợ bởi
Phần [openai] bao gồm client Python của OpenAI. Với các nhà cung cấp khác, bạn có thể cài gói cơ bản và thêm thư viện theo nhà cung cấp khi cần.
Thiết lập khóa API
LangExtract làm việc với nhiều nhà cung cấp AI. Thiết lập khóa API dưới dạng biến môi trường:
# OpenAI (get your key from https://platform.openai.com/api-keys)exportOPENAI_API_KEY="your-openai-key-here"# Anthropic (get your key from https://console.anthropic.com/settings/keys) exportANTHROPIC_API_KEY="your-anthropic-key-here"# Google AI (get your key from https://aistudio.google.com/app/apikey)exportGOOGLE_API_KEY="your-google-key-here"Được hỗ trợ bởi
Bạn chỉ cần khóa cho các nhà cung cấp dự định sử dụng. Với mô hình cục bộ qua Ollama, không cần khóa API — chỉ cần cài và chạy Ollama trên máy của bạn.
Kiểm tra nhanh
Xác minh thiết lập của bạn bằng một bài kiểm tra đơn giản:
import langextract as lx
import textwrap
# 1. Define the prompt and extraction rules
prompt = textwrap.dedent("""\
Extract characters, emotions, and relationships in order of appearance.
Use exact text for extractions. Do not paraphrase or overlap entities.
Provide meaningful attributes for each entity to add context.""")# 2. Provide a high-quality example to guide the model
examples =[
lx.data.ExampleData(
text="ROMEO. But soft! What light through yonder window breaks? It is the east, and Juliet is the sun.",
extractions=[
lx.data.Extraction(
extraction_class="character",
extraction_text="ROMEO",
attributes={"emotional_state":"wonder"},),],)]# The input text to be processed
input_text ="Lady Juliet gazed longingly at the stars, her heart aching for Romeo"# Run the extraction
result = lx.extract(
text_or_documents=input_text,
prompt_description=prompt,
examples=examples,
model_id="gpt-4o-mini",)print("Extraction successful!")Được hỗ trợ bởi
Thực hiện Nhận dạng Thực thể Có tên (NER) trong LangExtract
Named Entity Recognition (NER) tìm và phân loại các mẩu thông tin cụ thể trong văn bản , như tìm tất cả tên công ty, con người, và địa điểm được nhắc tới trong một báo cáo kinh doanh.
Các công cụ NER truyền thống làm việc với các danh mục định sẵn như “PERSON” hoặc “ORGANIZATION,” nhưng thường bỏ sót các thực thể phụ thuộc ngữ cảnh quan trọng cho doanh nghiệp của bạn. LangExtract cho phép bạn định nghĩa kiểu thực thể tùy chỉnh và dạy AI nhận ra các mẫu đặc thù cho miền của bạn.
Hãy cùng thực hành trích xuất thực thể từ email hỗ trợ khách hàng. Thay vì các danh mục chung chung, chúng ta sẽ xác định các thực thể đặc thù hỗ trợ như loại khiếu nại, tên sản phẩm, và khung thời gian xử lý để giúp ưu tiên phiếu hỗ trợ.
Định nghĩa tác vụ trích xuất
Bước đầu tiên là mô tả những gì bạn muốn trích xuất bằng một prompt rõ ràng. Prompt này giống như hướng dẫn cho một nhà phân tích con người — bạn càng cụ thể, kết quả càng tốt:
import langextract as lx
import textwrap
# Define what we want to extract from support emails
prompt = textwrap.dedent("""
Extract customer support entities from email text.
Focus on actionable information that helps prioritize and route tickets.
Use exact text from the email - don't paraphrase or summarize.
Include helpful attributes that add context for support agents.
""")Được hỗ trợ bởi
Hàm textwrap.dedent() loại bỏ thụt lề thừa khỏi chuỗi nhiều dòng, giúp prompt của bạn dễ đọc trong mã mà vẫn gọn gàng khi gửi tới AI. Nếu không có nó, AI sẽ thấy tất cả khoảng trắng thừa từ thụt lề mã của bạn.
Prompt này yêu cầu AI tìm thông tin đặc thù hỗ trợ, dùng nguyên văn từ văn bản, và bổ sung bối cảnh qua thuộc tính. Điều cốt yếu là cụ thể về miền của bạn (hỗ trợ khách hàng) và điều gì làm cho thông tin hữu ích (giúp ưu tiên và phân luồng phiếu).
Cung cấp ví dụ trích xuất
Ví dụ dạy AI chính xác thứ bạn muốn và cách định dạng kết quả. Mỗi ví dụ cho AI thấy một đoạn văn bản và các thực thể chính xác bạn muốn trích xuất từ đó:
# Create examples that show the AI what to extract
examples =[
lx.data.ExampleData(
text="My laptop screen keeps flickering. I bought it 3 months ago and need this fixed urgently for my presentation tomorrow.",
extractions=[
lx.data.Extraction(
extraction_class="product",
extraction_text="laptop",
attributes={"issue":"screen flickering","urgency":"high"}),
lx.data.Extraction(
extraction_class="timeline",
extraction_text="3 months ago",
attributes={"context":"purchase_date"}),
lx.data.Extraction(
extraction_class="urgency_indicator",
extraction_text="urgently for my presentation tomorrow",
attributes={"priority":"high","deadline":"tomorrow"})])]Được hỗ trợ bởi
Mỗi đối tượng ExampleData chứa một mẫu văn bản và danh sách các đối tượng Extraction. Các đối tượng Extraction chỉ định ba điều:
extraction_class: Kiểu thực thể (như "product" hoặc "timeline")
extraction_text: Nguyên văn từ văn bản gốc
attributes: Ngữ cảnh bổ sung giúp hiểu rõ hơn về thực thể
Các thuộc tính là thứ tạo nên khác biệt của LangExtract so với NER truyền thống. Thay vì chỉ tìm “laptop,” ta còn ghi nhận vấn đề “screen flickering” và đánh dấu mức độ khẩn cấp cao.
Chạy trích xuất
Giờ bạn có thể chạy trích xuất trên văn bản mới bằng prompt và ví dụ của mình. LangExtract sẽ áp dụng những gì đã học để tìm các thực thể tương tự:
# Sample support email to analyze
support_email ="""
Subject: WiFi adapter not working after Windows update
Hi support team,
My USB WiFi adapter stopped working completely after yesterday's Windows update.
I've tried restarting my computer multiple times but no luck. This is blocking me
from working from home today. I have an important client call at 2 PM and really
need internet access. The adapter worked perfectly before the update.
Thanks,
Mike Chen
"""# Run the extraction
result = lx.extract(
text_or_documents=support_email,
prompt_description=prompt,
examples=examples,
model_id="gpt-4o-mini")print("Extraction completed successfully!")Được hỗ trợ bởi
Hàm lx.extract() nhận văn bản của bạn, áp dụng hướng dẫn trong prompt, và dùng các ví dụ để dẫn dắt việc trích xuất. Nó trả về một đối tượng kết quả chứa tất cả thực thể tìm được, kèm theo vị trí chính xác của chúng trong văn bản gốc.
Bạn có thể thử nghiệm các mô hình khác nhau bằng cách đổi tham số model_id. Các mô hình như "claude-3-haiku" hoặc "gpt-4o" có thể cho kết quả khác nhau tùy độ phức tạp văn bản và yêu cầu của bạn.
Làm việc với dữ liệu đã trích xuất trong LangExtract
Khi trích xuất xong, LangExtract trả về một đối tượng kết quả chứa tất cả các thực thể tìm được kèm vị trí chính xác và thuộc tính của chúng. Sức mạnh thực sự đến từ cách bạn truy cập, phân tích, và chia sẻ dữ liệu có cấu trúc này.
Truy cập các thực thể đã trích xuất
Đối tượng kết quả lưu tất cả thực thể tìm thấy trong thuộc tính extractions. Mỗi extraction chứa văn bản thực thể, kiểu của nó, vị trí trong tài liệu gốc, và mọi thuộc tính:
# Look at all extracted entitiesfor extraction in result.extractions:print(f"Type: {extraction.extraction_class}")print(f"Text: '{extraction.extraction_text}'")print(f"Location: chars {extraction.char_interval.start_pos}-{extraction.char_interval.end_pos}")print(f"Attributes: {extraction.attributes}")print("---")Được hỗ trợ bởi
Kết quả:
Type: product
Text: 'USB WiFi adapter'
Location: chars 78-94
Attributes: {'issue': 'not working after Windows update', 'previous_status': 'worked perfectly before the update'}
---
Type: timeline
Text: 'yesterday'
Location: chars 128-137
Attributes: {'context': 'Windows update'}
---
Type: urgency_indicator
Text: 'blocking me from working from home today'
Location: chars 227-268
Attributes: {'priority': 'high', 'context': 'work from home'}
---
Type: urgency_indicator
Text: 'important client call at 2 PM'
Location: chars 280-309
Attributes: {'priority': 'high', 'deadline': '2 PM today'}
---Được hỗ trợ bởi
Mỗi đối tượng extraction theo dõi chính xác thông tin đến từ đâu bằng char_interval, cho biết vị trí bắt đầu và kết thúc trong văn bản gốc. Việc theo dõi nguồn này giúp bạn xác minh kết quả và hiểu ngữ cảnh.
Phân tích mẫu thực thể
Bạn có thể nhóm và đếm thực thể để hiểu các mẫu trong dữ liệu:
from collections import Counter
# Count different entity types
entity_types = Counter(e.extraction_class for e in result.extractions)print("Entity breakdown:")for entity_type, count in entity_types.items():
percentage =(count /len(result.extractions))*100print(f" {entity_type}: {count} entities ({percentage:.1f}%)")# Find high-priority support tickets
urgent_entities =[
e for e in result.extractions
if e.extraction_class =="urgency_indicator"and e.attributes.get("priority")=="high"]print(f"\nFound {len(urgent_entities)} high-priority indicators")Được hỗ trợ bởi
Phân tích này giúp bạn nhanh chóng nhận ra các mẫu như loại sản phẩm nào tạo ra nhiều phiếu hỗ trợ nhất hoặc bạn đang nhận bao nhiêu yêu cầu khẩn cấp.
Lưu kết quả trích xuất
LangExtract lưu kết quả theo định dạng JSONL (JSON Lines), nơi mỗi dòng chứa dữ liệu trích xuất của một tài liệu. Định dạng này hoạt động tốt với các công cụ xử lý dữ liệu và giúp dễ dàng gộp kết quả từ nhiều lần trích xuất:
# Save results to a JSONL file
lx.io.save_annotated_documents([result],
output_name="support_ticket_extractions.jsonl",
output_dir=".")Được hỗ trợ bởi
JSONL lưu mỗi tài liệu trên một dòng dưới dạng đối tượng JSON hoàn chỉnh. Khác với tệp JSON thông thường chứa một mảng lớn, tệp JSONL có thể được xử lý theo từng dòng, rất phù hợp cho tập dữ liệu lớn. Bạn có thể mở các tệp này trong bất kỳ trình soạn thảo văn bản nào hoặc nạp vào các công cụ phân tích dữ liệu như pandas.
Tạo hình trực quan HTML tương tác
Hình trực quan HTML là nơi LangExtract thực sự nổi bật. Nó tạo một báo cáo tương tác làm nổi bật các thực thể đã trích xuất trong văn bản gốc và cho phép bạn nhấp để duyệt kết quả:
# Generate interactive HTML visualization
html_content = lx.visualize("support_ticket_extractions.jsonl")# Save the HTML filewithopen("support_analysis.html","w")as f:ifhasattr(html_content,"data"):
f.write(html_content.data)# For Jupyter notebookselse:
f.write(html_content)# For regular Python scriptsprint("HTML visualization saved as 'support_analysis.html'")Được hỗ trợ bởi
Kết quả:
HTML visualization saved as 'support_analysis.html'Được hỗ trợ bởi
Hình trực quan HTML hiển thị văn bản gốc của bạn với các điểm nổi bật theo màu cho từng loại thực thể. Bạn có thể nhấp vào đoạn văn bản được tô sáng để xem thuộc tính đã trích xuất, điều hướng giữa các thực thể bằng điều khiển, và xác minh rằng AI đã nhận diện đúng thông tin quan trọng. Điều này giúp bạn kiểm tra nhanh kết quả và củng cố niềm tin vào quy trình trích xuất.
Hình trực quan bao gồm chú giải hiển thị từng loại thực thể, điều khiển điều hướng để di chuyển giữa các thực thể, và thông tin thuộc tính chi tiết cho mỗi extraction. Cách tiếp cận tương tác này giúp việc hiểu và xác thực kết quả dễ dàng hơn nhiều so với xem dữ liệu JSON thô.
Trích xuất mối quan hệ trong LangExtract
Các thực thể hỗ trợ khách hàng mà chúng ta trích xuất hoạt động tốt khi đứng riêng lẻ, nhưng chưa kể toàn bộ câu chuyện. Khi khách hàng nói “MacBook Pro 2021 của tôi bị lỗi pin,” bạn cần hiểu rằng sản phẩm, năm mẫu, và vấn đề đều thuộc cùng một trường hợp hỗ trợ. Tìm các mảnh riêng lẻ không giúp ích — bạn cần mối quan hệ giữa chúng.
NLP truyền thống xử lý điều này kém vì coi mỗi thực thể là thông tin cô lập. Bạn có thể trích xuất “MacBook Pro”, “2021”, và “lỗi pin” thành các thực thể riêng, nhưng sau đó cần quy tắc phức tạp để xác định chi tiết nào thuộc sản phẩm nào. Cách tiếp cận này nhanh chóng sụp đổ khi xử lý nhiều sản phẩm hoặc khách hàng trong cùng văn bản.
LangExtract giải quyết bằng cách trích xuất mối quan hệ ngay trong lượt xử lý ban đầu thay vì cố nối các thực thể sau đó. Bạn có thể nhóm thông tin liên quan bằng các thuộc tính chung đồng thời vẫn theo dõi chính xác nguồn gốc của từng mẩu trong văn bản gốc. Hãy cùng thực hành trích xuất thông tin nhân viên từ tài liệu nhân sự, nơi ta cần liên kết con người với vai trò, phòng ban, và thông tin liên hệ.
Thiết lập trích xuất mối quan hệ
Trong ví dụ này, chúng ta sẽ trích xuất thông tin nhân viên từ thông báo công ty, nơi nhiều chi tiết về mỗi người cần được kết nối:
import langextract as lx
import textwrap
# Define relationship extraction prompt
prompt = textwrap.dedent("""
Extract employee information from company announcements.
Group related details about each person using employee_group attributes.
Connect names, titles, departments, and contact info for each employee.
Use exact text from the announcement - don't paraphrase.
""")# Create examples showing how to group related information
examples =[
lx.data.ExampleData(
text="Sarah Johnson, our new Marketing Director, will lead the digital campaigns team. You can reach Sarah at [email protected] for any marketing questions.",
extractions=[
lx.data.Extraction(
extraction_class="person",
extraction_text="Sarah Johnson",
attributes={"employee_group":"Sarah Johnson"}),
lx.data.Extraction(
extraction_class="job_title",
extraction_text="Marketing Director",
attributes={"employee_group":"Sarah Johnson"}),
lx.data.Extraction(
extraction_class="department",
extraction_text="digital campaigns team",
attributes={"employee_group":"Sarah Johnson"}),
lx.data.Extraction(
extraction_class="contact",
extraction_text="[email protected]",
attributes={"employee_group":"Sarah Johnson","type":"email"})])]Được hỗ trợ bởi
Thuộc tính employee_group đóng vai trò hệ thống liên kết — tất cả thực thể có cùng giá trị employee_group thuộc về cùng một người. Điều này cho phép bạn trích xuất thông tin phức tạp, nhiều phần trong khi vẫn theo dõi chi tiết nào đi cùng nhau.
Chạy trích xuất mối quan hệ
Giờ hãy trích xuất từ một thông báo công ty có nhiều nhân viên:
# Sample HR announcement with multiple employees
hr_announcement ="""
We're excited to announce two new hires joining our team this month.
Mike Chen joins us as Senior Software Engineer in our Backend Development group. Mike brings 8 years of Python experience and will focus on API architecture. Please welcome Mike - he'll be working from our Seattle office and you can reach him at [email protected].
Additionally, Lisa Rodriguez starts as Product Manager for our Mobile Apps division. Lisa previously worked at TechStart Inc and has extensive experience with user research. Her office phone is 555-0199 and email is [email protected].
"""# Extract relationships
result = lx.extract(
text_or_documents=hr_announcement,
prompt_description=prompt,
examples=examples,
model_id="gpt-4o-mini")print(f"Extracted {len(result.extractions)} entities")Được hỗ trợ bởi
Sau khi trích xuất, bạn có thể nhóm các thực thể liên quan để xem thông tin đầy đủ cho mỗi nhân viên. Điều này cần một chút mã Python để tổ chức lại các thực thể rải rác thành nhóm hợp lý:
from collections import defaultdict
# Group entities by employee_group
employee_groups = defaultdict(list)for extraction in result.extractions:
group_id = extraction.attributes.get("employee_group")if group_id:
employee_groups[group_id].append(extraction)# Print organized employee informationfor employee, details in employee_groups.items():print(f"\n=== {employee} ===")for detail in details:print(f"{detail.extraction_class}: {detail.extraction_text}")if detail.attributes.get("type"):print(f" Type: {detail.attributes['type']}")Được hỗ trợ bởi
Kết quả:
=== Mike Chen ===
person: Mike Chen
job_title: Senior Software Engineer
department: Backend Development group
contact: [email protected]
Type: email
contact: Seattle office
Type: location
=== Lisa Rodriguez ===
person: Lisa Rodriguez
job_title: Product Manager
department: Mobile Apps division
contact: [email protected]
Type: email
contact: 555-0199
Type: phoneĐược hỗ trợ bởi
Từng bước, đoạn mã này làm như sau:
defaultdict(list) tạo một từ điển mà mỗi mục mới tự động bắt đầu là một danh sách rỗng
extraction.attributes.get("employee_group") lấy an toàn ID nhóm từ thuộc tính của mỗi thực thể, trả về None nếu không tồn tại
employee_groups[group_id].append(extraction) thêm mỗi thực thể vào danh sách của nhóm tương ứng
Vòng lặp lồng nhau sau đó in ra thông tin đầy đủ của mỗi nhóm, được tổ chức theo nhân viên
defaultdict là một collection của Python tự động tạo mục còn thiếu. Khi bạn truy cập employee_groups["Mike Chen"] lần đầu, nó tự tạo một danh sách rỗng cho nhân viên đó. Điều này giúp bạn không cần kiểm tra xem mỗi nhân viên đã tồn tại trong từ điển hay chưa.
Cách nhóm này cho phép bạn dựng lại hồ sơ nhân viên đầy đủ từ các thông tin rải rác trong văn bản gốc, đồng thời vẫn giữ vị trí nguồn chính xác cho từng mẩu dữ liệu.
Tạo hình trực quan mối quan hệ
Hình trực quan HTML càng giá trị hơn với dữ liệu mối quan hệ, vì nó hiển thị cả thực thể riêng lẻ và kết nối giữa chúng:
# Save the relationship extraction results
lx.io.save_annotated_documents([result],
output_name="employee_relationships.jsonl",
output_dir=".")# Generate HTML visualization showing relationships
html_content = lx.visualize("employee_relationships.jsonl")withopen("employee_relationships.html","w")as f:ifhasattr(html_content,"data"):
f.write(html_content.data)else:
f.write(html_content)print("Relationship visualization saved as 'employee_relationships.html'")Được hỗ trợ bởi
Hình trực quan mối quan hệ làm nổi bật cách các mẩu thông tin khác nhau kết nối để tạo thành hồ sơ nhân viên hoàn chỉnh, giúp bạn dễ dàng xác minh rằng AI đã nhận diện và nhóm đúng các chi tiết liên quan từ thông báo gốc.
Sử dụng LangExtract với các nhà cung cấp mô hình khác nhau
LangExtract hoạt động với nhiều nhà cung cấp mô hình AI, mỗi bên có sự đánh đổi giữa chi phí, tốc độ, và độ chính xác. Các mô hình Gemini của Google hoạt động ngay lập tức với hỗ trợ schema tích hợp, khiến chúng trở thành lựa chọn dễ nhất cho hầu hết tác vụ trích xuất. GPT của OpenAI thường cho độ chính xác cao hơn nhưng cần thêm cấu hình và tốn chi phí hơn cho mỗi lần trích xuất.
# Using Google Gemini (default and recommended)
result_gemini = lx.extract(
text_or_documents=employee_text,
prompt_description=prompt,
examples=examples,
model_id="gemini-2.5-flash"# Fast and cost-effective)# Using OpenAI GPT models
result_openai = lx.extract(
text_or_documents=employee_text,
prompt_description=prompt,
examples=examples,
model_id="gpt-4o-mini",
fence_output=True,# Required for OpenAI
use_schema_constraints=False# OpenAI doesn't support constraints)Được hỗ trợ bởi
Để xử lý cục bộ hoặc khi bạn muốn tránh chi phí API, bạn có thể chạy mô hình tại chỗ bằng Ollama. Các mô hình cục bộ phù hợp với các tác vụ trích xuất đơn giản và cho bạn toàn quyền kiểm soát dữ liệu, dù thường chạy chậm hơn và có thể kém chính xác hơn so với tùy chọn trên đám mây.
# Using local models with Ollama (requires Ollama installed)
result_local = lx.extract(
text_or_documents=employee_text,
prompt_description=prompt,
examples=examples,
model_id="gemma2:2b",# Local Gemma model
model_url="http://localhost:11434",# Ollama server
fence_output=False,# Local models don't need fencing
use_schema_constraints=False# Disable constraints)Được hỗ trợ bởi
Mở rộng lên sản xuất
Văn bản ngoài đời thực chẳng giống các ví dụ sạch đẹp của chúng ta. Bạn nhận được các báo cáo 50 trang với định dạng lộn xộn, email khách hàng đầy lỗi chính tả, và PDF khoảng cách kỳ lạ. Một số tài liệu có hàng nghìn từ trải khắp nhiều phần, và thông tin quan trọng có thể bị chôn ở bất cứ đâu.
LangExtract xử lý các tình huống lộn xộn này bằng ba công cụ chính: chạy nhiều tài liệu cùng lúc, thử trích xuất nhiều lần, và chia tài liệu lớn thành phần nhỏ. Thay vì xử lý từng tài liệu một, bạn có thể làm việc trên nhiều tài liệu cùng lúc, giúp mọi thứ nhanh hơn nhiều.
# Settings for processing lots of real documents
result = lx.extract(
text_or_documents=document_batch,
prompt_description=prompt,
examples=examples,
model_id="gemini-2.5-flash",
max_workers=20,# Work on many documents at once
extraction_passes=3,# Try extraction 3 times
max_char_buffer=1000# Break big text into small pieces)Được hỗ trợ bởi
Thiết lập max_workers điều khiển số tài liệu được xử lý đồng thời. Nhiều worker hơn nghĩa là nhanh hơn, nhưng cũng tốn nhiều tiền hơn và có thể chạm giới hạn API. Hãy bắt đầu với 10–20 worker và theo dõi.
Nhiều lượt trích xuất giúp tìm thông tin có thể bị bỏ lỡ ở lần đầu. LangExtract chạy trích xuất nhiều lần và hợp nhất kết quả. Cách này bắt được nhiều chi tiết hơn nhưng tốn thời gian và chi phí hơn.
Chia tài liệu thành khối giúp xử lý văn bản dài. Thiết lập max_char_buffer cắt tài liệu lớn thành phần nhỏ phù hợp hơn với mô hình AI. Khối nhỏ (1000–2000 ký tự) bắt được nhiều chi tiết hơn, trong khi khối lớn (3000–5000 ký tự) giữ nhiều ngữ cảnh hơn nhưng có thể bỏ sót.
# Different settings for different types of documents# For important documents that need careful review
detailed_result = lx.extract(
text_or_documents=legal_documents,
extraction_passes=5,# Try 5 times for accuracy
max_char_buffer=800,# Small chunks for detail
max_workers=10# Fewer workers to avoid limits)# For quick processing of simple documents
quick_result = lx.extract(
text_or_documents=email_batch,
extraction_passes=1,# Single pass for speed
max_char_buffer=3000,# Bigger chunks for speed
max_workers=30# More workers for faster results)Được hỗ trợ bởi
Làm việc sản xuất đồng nghĩa đối mặt với sự cố. Tài liệu có thể lỗi mã hóa, kết nối mạng có thể thất bại, và API có thể giới hạn tốc độ xử lý. Hãy theo dõi job trích xuất, thêm logic thử lại cho tài liệu lỗi, và theo dõi chi tiêu trên các nhà cung cấp AI.
Khi làm việc với các loại tài liệu khác nhau, hãy thiết lập quy tắc trích xuất riêng cho từng loại. Hợp đồng pháp lý cần prompt khác email khách hàng. Báo cáo tài chính cần kích thước khối khác bài đăng mạng xã hội. Xây dựng pipeline riêng cho từng loại tài liệu thay vì cố gắng để một hệ thống xử lý tất cả.
LangExtract so với các thư viện NLP khác
LangExtract có cách tiếp cận khác so với các thư viện NLP truyền thống. Trong khi đa số thư viện dựa vào mô hình tiền huấn luyện hoặc hệ thống theo quy tắc, LangExtract sử dụng các Mô hình Ngôn ngữ Lớn có thể hiểu ngữ cảnh và ý nghĩa như con người. Hãy so sánh với ba thư viện NLP Python phổ biến để hiểu khi nào bạn nên chọn LangExtract thay vì các lựa chọn khác.
spaCy
spaCy tập trung vào tốc độ và các tác vụ NLP sẵn sàng cho sản xuất như tách từ, gán loại từ, và nhận dạng thực thể có tên. Nó có các mô hình tiền huấn luyện nhận diện thực thể phổ biến như con người, tổ chức, và địa điểm, nhưng gặp khó với thực thể theo miền hoặc danh mục tùy chỉnh. spaCy xuất sắc trong xử lý lượng lớn văn bản nhanh chóng, nhưng bạn cần huấn luyện lại mô hình hoặc viết quy tắc phức tạp để trích xuất thông tin tùy chỉnh.
LangExtract loại bỏ độ phức tạp này bằng cách cho phép bạn định nghĩa thực thể tùy chỉnh qua ví dụ và prompt đơn giản, đồng thời cung cấp vị trí nguồn chính xác mà spaCy không theo dõi.
NLTK (Natural Language Toolkit)
NLTK (Natural Language Toolkit) được thiết kế cho giáo dục và nghiên cứu, cung cấp nhiều thuật toán và tập dữ liệu NLP. Nó mang đến các khối xây dựng cho xử lý văn bản nhưng đòi hỏi kiến thức lập trình đáng kể để dựng giải pháp hoàn chỉnh. NLTK phù hợp để học khái niệm NLP và thử nghiệm, nhưng để xây hệ thống trích xuất sẵn sàng sản xuất, bạn phải kết hợp nhiều thành phần NLTK và viết nhiều mã.
LangExtract cung cấp giải pháp hoàn chỉnh ngay từ đầu — bạn định nghĩa điều mình muốn qua ví dụ thay vì viết thuật toán, và có hình trực quan tương tác mà không cần phát triển bổ sung.
Transformers (Hugging Face)
Transformers (Hugging Face) cung cấp quyền truy cập các mô hình transformer tối tân cho nhiều tác vụ NLP, gồm nhận dạng thực thể có tên và hỏi đáp. Dù mạnh mẽ, nó đòi hỏi chuyên môn máy học để tinh chỉnh mô hình cho miền cụ thể, và không có sẵn theo dõi nguồn hay trích xuất mối quan hệ. Bạn cần tự triển khai mô hình, quản lý các định dạng mô hình khác nhau, và tự xây công cụ trực quan hóa.
LangExtract loại bỏ sự phức tạp khi làm việc với các mô hình AI khác nhau, tự động xử lý theo dõi nguồn, và cung cấp trích xuất mối quan hệ qua nhóm thuộc tính đơn giản thay vì kiến trúc mô hình phức tạp.
Tính năng
LangExtract
spaCy
NLTK
Transformers
Độ phức tạp thiết lập
Prompt + ví dụ đơn giản
Huấn luyện mô hình/quy tắc
Lập trình thuật toán
Tinh chỉnh mô hình
Thực thể tùy chỉnh
Định nghĩa bằng ngôn ngữ tự nhiên
Cần huấn luyện lại
Viết quy tắc thủ công
Tinh chỉnh mô hình
Theo dõi nguồn
Tự động với vị trí chính xác
Không có
Tự triển khai thủ công
Tự triển khai thủ công
Trích xuất mối quan hệ
Nhóm tích hợp sẵn
Viết quy tắc phức tạp
Lập trình thủ công
Phát triển mô hình tùy chỉnh
Hiểu ngữ cảnh
Dựa trên LLM
Dựa trên mẫu
Dựa trên quy tắc
Phụ thuộc mô hình
Trực quan hóa
HTML tương tác
Cần công cụ ngoài
Cần công cụ ngoài
Cần công cụ ngoài
Độ khó học
Thấp (dựa trên ví dụ)
Trung bình (kiến thức NLP)
Cao (thuật toán)
Cao (chuyên môn ML)
Phù hợp nhất cho
Trích xuất theo miền
Pipeline NLP tổng quát
Nghiên cứu/học tập
Ứng dụng AI tùy chỉnh
Kết luận
LangExtract biến việc trích xuất văn bản từ viết quy tắc phức tạp thành trao đổi với AI về dữ liệu của bạn. Bạn đã học cách thiết lập trích xuất thực thể tùy chỉnh bằng prompt và ví dụ đơn giản, nhóm thông tin liên quan qua trích xuất mối quan hệ, và tạo hình trực quan tương tác cho thấy chính xác nguồn gốc của từng mẩu dữ liệu. Thư viện xử lý các thách thức sản xuất như xử lý song song và chia khối tài liệu, giúp nó thực tiễn cho các ứng dụng đời thực với văn bản lộn xộn, thiếu nhất quán.
Dù bạn đang xử lý phiếu hỗ trợ khách hàng, phân tích tài liệu pháp lý, hay trích xuất insight từ bài báo nghiên cứu, LangExtract mang đến cách tiếp cận trực quan hơn so với các thư viện NLP truyền thống. Thay vì tốn thời gian huấn luyện mô hình hay viết quy tắc, bạn có thể tập trung vào định nghĩa thông tin quan trọng cho trường hợp sử dụng cụ thể. Hãy bắt đầu bằng các trích xuất đơn giản trên dữ liệu văn bản của riêng bạn, rồi mở rộng bằng các kỹ thuật sản xuất được đề cập trong hướng dẫn này.
Tôi là người sáng tạo nội dung về khoa học dữ liệu với hơn 2 năm kinh nghiệm và là một trong những tài khoản có lượng người theo dõi lớn nhất trên Medium. Tôi thích viết các bài chuyên sâu về AI và ML với chút giọng điệu mỉa mai, vì bạn cũng phải làm gì đó để chúng bớt khô khan. Tôi đã xuất bản hơn 130 bài viết và một khóa học trên DataCamp, cùng với một khóa nữa đang được thực hiện. Nội dung của tôi đã được hơn 5 triệu lượt xem, trong đó 20 nghìn người đã trở thành người theo dõi trên cả Medium và LinkedIn.
Trích xuất dữ liệu có cấu trúc từ tài liệu văn bản gây ra nhiều vấn đề lớn cho các nhóm dữ liệu. Biểu thức chính quy dễ hỏng khi định dạng thay đổi, mã phân tích tùy chỉnh bỏ lỡ ngữ cảnh mà con người dễ dàng nắm bắt, và các giải pháp này cần sửa liên tục khi nguồn dữ liệu của bạn thay đổi.
LangExtract giải quyết điều này bằng cách sử dụng các mô hình AI có thể đọc văn bản như con người và theo dõi chính xác nguồn gốc của từng thông tin. Bạn chỉ cần nói cho nó biết dữ liệu bạn muốn bằng những thuật ngữ đơn giản kèm vài ví dụ, và nó sẽ làm phần việc khó là hiểu và trích xuất thông tin đó.
Trong hướng dẫn này, tôi sẽ giải thích từng bước cách thiết lập LangExtract cho nhận dạng thực thể có tên, trích xuất mối quan hệ giữa các thực thể, làm việc với các nhà cung cấp mô hình AI khác nhau, và so sánh cách tiếp cận của LangExtract với các thư viện NLP truyền thống. Bạn cũng sẽ học cách định nghĩa tác vụ trích xuất, cung cấp ví dụ huấn luyện, và xử lý kết quả có cấu trúc cho các quy trình phân tích của bạn.
LangExtract là gì?
LangExtract là một thư viện Python biến văn bản lộn xộn thành dữ liệu có tổ chức bằng cách dùng các mô hình AI. Các công cụ xử lý văn bản cũ dễ bị rối bởi ngữ cảnh — chúng có thể thấy “Apple” và nghĩ đó là trái cây khi bạn đang đọc về công ty công nghệ, hoặc thấy “$500” và gọi đó là giá khi thực ra đó là mã nhân viên. Khớp mẫu cơ bản có thể phát hiện địa chỉ email, nhưng không thể biết “[email protected]” là nhân viên hiện tại hay chỉ là ai đó được nhắc đến trong một email cũ.
Để khắc phục các vấn đề về ngữ cảnh và độ chính xác này, LangExtract mang đến cho bạn:
Nguồn: GitHub
Các công cụ này phối hợp để thay đổi cách bạn trích xuất thông tin từ văn bản. Thay vì viết các quy tắc phức tạp dễ hỏng, bạn nói cho AI biết mình muốn gì bằng những ví dụ đơn giản. AI đọc văn bản như con người và theo dõi nguồn gốc mọi thứ. Nhờ đó bạn có thể trích xuất thông tin và mối quan hệ phức tạp mà theo cách cũ phải mất hàng trăm dòng mã mới tìm ra.
Khi nào bạn nên dùng LangExtract?
LangExtract phát huy hiệu quả nhất khi bạn cần trích xuất thông tin tùy biến mà các công cụ NLP truyền thống khó xử lý tốt. Nếu bạn làm việc với văn bản theo lĩnh vực chuyên biệt nơi nhận dạng thực thể có tên tiêu chuẩn không đáp ứng, LangExtract cho phép bạn định nghĩa chính xác điều quan trọng với doanh nghiệp mà không cần viết quy tắc phức tạp hay huấn luyện lại mô hình. Nó đặc biệt hữu ích khi bạn cần hiểu ngữ cảnh và mối quan hệ giữa các mẩu thông tin khác nhau, không chỉ tìm các thực thể riêng lẻ.
LangExtract là lựa chọn tốt khi bạn có:
Bạn nên cân nhắc công cụ khác nếu đang làm các tác vụ NLP đã thành chuẩn như nhận dạng thực thể có tên cơ bản cho các danh mục phổ biến, cần xử lý cực nhanh các mẫu đơn giản, hoặc có yêu cầu nghiêm ngặt tránh gọi API bên ngoài. Các thư viện truyền thống như spaCy vượt trội ở các tác vụ NLP tiêu chuẩn với xử lý khối lượng lớn, trong khi LangExtract tỏa sáng khi bạn cần trích xuất thông minh, tùy biến với độ phức tạp thiết lập tối thiểu.
Thiết lập LangExtract
Trước khi bắt đầu trích xuất dữ liệu, bạn cần cài đặt LangExtract và thiết lập quyền truy cập các mô hình AI. Thư viện hỗ trợ nhiều cách cài đặt và làm việc với các nhà cung cấp AI khác nhau.
Cài đặt
Cài đặt LangExtract bằng pip hoặc uv. Với tích hợp OpenAI, hãy dùng gói extras:
Phần
[openai]bao gồm client Python của OpenAI. Với các nhà cung cấp khác, bạn có thể cài gói cơ bản và thêm thư viện theo nhà cung cấp khi cần.Thiết lập khóa API
LangExtract làm việc với nhiều nhà cung cấp AI. Thiết lập khóa API dưới dạng biến môi trường:
Bạn chỉ cần khóa cho các nhà cung cấp dự định sử dụng. Với mô hình cục bộ qua Ollama, không cần khóa API — chỉ cần cài và chạy Ollama trên máy của bạn.
Kiểm tra nhanh
Xác minh thiết lập của bạn bằng một bài kiểm tra đơn giản:
Thực hiện Nhận dạng Thực thể Có tên (NER) trong LangExtract
Named Entity Recognition (NER) tìm và phân loại các mẩu thông tin cụ thể trong văn bản , như tìm tất cả tên công ty, con người, và địa điểm được nhắc tới trong một báo cáo kinh doanh.
Các công cụ NER truyền thống làm việc với các danh mục định sẵn như “PERSON” hoặc “ORGANIZATION,” nhưng thường bỏ sót các thực thể phụ thuộc ngữ cảnh quan trọng cho doanh nghiệp của bạn. LangExtract cho phép bạn định nghĩa kiểu thực thể tùy chỉnh và dạy AI nhận ra các mẫu đặc thù cho miền của bạn.
Hãy cùng thực hành trích xuất thực thể từ email hỗ trợ khách hàng. Thay vì các danh mục chung chung, chúng ta sẽ xác định các thực thể đặc thù hỗ trợ như loại khiếu nại, tên sản phẩm, và khung thời gian xử lý để giúp ưu tiên phiếu hỗ trợ.
Định nghĩa tác vụ trích xuất
Bước đầu tiên là mô tả những gì bạn muốn trích xuất bằng một prompt rõ ràng. Prompt này giống như hướng dẫn cho một nhà phân tích con người — bạn càng cụ thể, kết quả càng tốt:
Hàm
textwrap.dedent()loại bỏ thụt lề thừa khỏi chuỗi nhiều dòng, giúp prompt của bạn dễ đọc trong mã mà vẫn gọn gàng khi gửi tới AI. Nếu không có nó, AI sẽ thấy tất cả khoảng trắng thừa từ thụt lề mã của bạn.Prompt này yêu cầu AI tìm thông tin đặc thù hỗ trợ, dùng nguyên văn từ văn bản, và bổ sung bối cảnh qua thuộc tính. Điều cốt yếu là cụ thể về miền của bạn (hỗ trợ khách hàng) và điều gì làm cho thông tin hữu ích (giúp ưu tiên và phân luồng phiếu).
Cung cấp ví dụ trích xuất
Ví dụ dạy AI chính xác thứ bạn muốn và cách định dạng kết quả. Mỗi ví dụ cho AI thấy một đoạn văn bản và các thực thể chính xác bạn muốn trích xuất từ đó:
Mỗi đối tượng
ExampleDatachứa một mẫu văn bản và danh sách các đối tượngExtraction. Các đối tượngExtractionchỉ định ba điều:extraction_class: Kiểu thực thể (như "product" hoặc "timeline")extraction_text: Nguyên văn từ văn bản gốcattributes: Ngữ cảnh bổ sung giúp hiểu rõ hơn về thực thểCác thuộc tính là thứ tạo nên khác biệt của LangExtract so với NER truyền thống. Thay vì chỉ tìm “laptop,” ta còn ghi nhận vấn đề “screen flickering” và đánh dấu mức độ khẩn cấp cao.
Chạy trích xuất
Giờ bạn có thể chạy trích xuất trên văn bản mới bằng prompt và ví dụ của mình. LangExtract sẽ áp dụng những gì đã học để tìm các thực thể tương tự:
Kết quả:
Hàm
lx.extract()nhận văn bản của bạn, áp dụng hướng dẫn trong prompt, và dùng các ví dụ để dẫn dắt việc trích xuất. Nó trả về một đối tượng kết quả chứa tất cả thực thể tìm được, kèm theo vị trí chính xác của chúng trong văn bản gốc.Bạn có thể thử nghiệm các mô hình khác nhau bằng cách đổi tham số
model_id. Các mô hình như"claude-3-haiku"hoặc"gpt-4o"có thể cho kết quả khác nhau tùy độ phức tạp văn bản và yêu cầu của bạn.Làm việc với dữ liệu đã trích xuất trong LangExtract
Khi trích xuất xong, LangExtract trả về một đối tượng kết quả chứa tất cả các thực thể tìm được kèm vị trí chính xác và thuộc tính của chúng. Sức mạnh thực sự đến từ cách bạn truy cập, phân tích, và chia sẻ dữ liệu có cấu trúc này.
Truy cập các thực thể đã trích xuất
Đối tượng kết quả lưu tất cả thực thể tìm thấy trong thuộc tính
extractions. Mỗi extraction chứa văn bản thực thể, kiểu của nó, vị trí trong tài liệu gốc, và mọi thuộc tính:Kết quả:
Mỗi đối tượng extraction theo dõi chính xác thông tin đến từ đâu bằng
char_interval, cho biết vị trí bắt đầu và kết thúc trong văn bản gốc. Việc theo dõi nguồn này giúp bạn xác minh kết quả và hiểu ngữ cảnh.Phân tích mẫu thực thể
Bạn có thể nhóm và đếm thực thể để hiểu các mẫu trong dữ liệu:
Kết quả:
Phân tích này giúp bạn nhanh chóng nhận ra các mẫu như loại sản phẩm nào tạo ra nhiều phiếu hỗ trợ nhất hoặc bạn đang nhận bao nhiêu yêu cầu khẩn cấp.
Lưu kết quả trích xuất
LangExtract lưu kết quả theo định dạng JSONL (JSON Lines), nơi mỗi dòng chứa dữ liệu trích xuất của một tài liệu. Định dạng này hoạt động tốt với các công cụ xử lý dữ liệu và giúp dễ dàng gộp kết quả từ nhiều lần trích xuất:
JSONL lưu mỗi tài liệu trên một dòng dưới dạng đối tượng JSON hoàn chỉnh. Khác với tệp JSON thông thường chứa một mảng lớn, tệp JSONL có thể được xử lý theo từng dòng, rất phù hợp cho tập dữ liệu lớn. Bạn có thể mở các tệp này trong bất kỳ trình soạn thảo văn bản nào hoặc nạp vào các công cụ phân tích dữ liệu như pandas.
Tạo hình trực quan HTML tương tác
Hình trực quan HTML là nơi LangExtract thực sự nổi bật. Nó tạo một báo cáo tương tác làm nổi bật các thực thể đã trích xuất trong văn bản gốc và cho phép bạn nhấp để duyệt kết quả:
Kết quả:
Hình trực quan HTML hiển thị văn bản gốc của bạn với các điểm nổi bật theo màu cho từng loại thực thể. Bạn có thể nhấp vào đoạn văn bản được tô sáng để xem thuộc tính đã trích xuất, điều hướng giữa các thực thể bằng điều khiển, và xác minh rằng AI đã nhận diện đúng thông tin quan trọng. Điều này giúp bạn kiểm tra nhanh kết quả và củng cố niềm tin vào quy trình trích xuất.
Hình trực quan bao gồm chú giải hiển thị từng loại thực thể, điều khiển điều hướng để di chuyển giữa các thực thể, và thông tin thuộc tính chi tiết cho mỗi extraction. Cách tiếp cận tương tác này giúp việc hiểu và xác thực kết quả dễ dàng hơn nhiều so với xem dữ liệu JSON thô.
Trích xuất mối quan hệ trong LangExtract
Các thực thể hỗ trợ khách hàng mà chúng ta trích xuất hoạt động tốt khi đứng riêng lẻ, nhưng chưa kể toàn bộ câu chuyện. Khi khách hàng nói “MacBook Pro 2021 của tôi bị lỗi pin,” bạn cần hiểu rằng sản phẩm, năm mẫu, và vấn đề đều thuộc cùng một trường hợp hỗ trợ. Tìm các mảnh riêng lẻ không giúp ích — bạn cần mối quan hệ giữa chúng.
NLP truyền thống xử lý điều này kém vì coi mỗi thực thể là thông tin cô lập. Bạn có thể trích xuất “MacBook Pro”, “2021”, và “lỗi pin” thành các thực thể riêng, nhưng sau đó cần quy tắc phức tạp để xác định chi tiết nào thuộc sản phẩm nào. Cách tiếp cận này nhanh chóng sụp đổ khi xử lý nhiều sản phẩm hoặc khách hàng trong cùng văn bản.
LangExtract giải quyết bằng cách trích xuất mối quan hệ ngay trong lượt xử lý ban đầu thay vì cố nối các thực thể sau đó. Bạn có thể nhóm thông tin liên quan bằng các thuộc tính chung đồng thời vẫn theo dõi chính xác nguồn gốc của từng mẩu trong văn bản gốc. Hãy cùng thực hành trích xuất thông tin nhân viên từ tài liệu nhân sự, nơi ta cần liên kết con người với vai trò, phòng ban, và thông tin liên hệ.
Thiết lập trích xuất mối quan hệ
Trong ví dụ này, chúng ta sẽ trích xuất thông tin nhân viên từ thông báo công ty, nơi nhiều chi tiết về mỗi người cần được kết nối:
Thuộc tính
employee_groupđóng vai trò hệ thống liên kết — tất cả thực thể có cùng giá trịemployee_groupthuộc về cùng một người. Điều này cho phép bạn trích xuất thông tin phức tạp, nhiều phần trong khi vẫn theo dõi chi tiết nào đi cùng nhau.Chạy trích xuất mối quan hệ
Giờ hãy trích xuất từ một thông báo công ty có nhiều nhân viên:
Kết quả:
Làm việc với nhóm mối quan hệ
Sau khi trích xuất, bạn có thể nhóm các thực thể liên quan để xem thông tin đầy đủ cho mỗi nhân viên. Điều này cần một chút mã Python để tổ chức lại các thực thể rải rác thành nhóm hợp lý:
Kết quả:
Từng bước, đoạn mã này làm như sau:
defaultdict(list)tạo một từ điển mà mỗi mục mới tự động bắt đầu là một danh sách rỗngextraction.attributes.get("employee_group")lấy an toàn ID nhóm từ thuộc tính của mỗi thực thể, trả về None nếu không tồn tạiemployee_groups[group_id].append(extraction)thêm mỗi thực thể vào danh sách của nhóm tương ứngdefaultdictlà một collection của Python tự động tạo mục còn thiếu. Khi bạn truy cậpemployee_groups["Mike Chen"]lần đầu, nó tự tạo một danh sách rỗng cho nhân viên đó. Điều này giúp bạn không cần kiểm tra xem mỗi nhân viên đã tồn tại trong từ điển hay chưa.Cách nhóm này cho phép bạn dựng lại hồ sơ nhân viên đầy đủ từ các thông tin rải rác trong văn bản gốc, đồng thời vẫn giữ vị trí nguồn chính xác cho từng mẩu dữ liệu.
Tạo hình trực quan mối quan hệ
Hình trực quan HTML càng giá trị hơn với dữ liệu mối quan hệ, vì nó hiển thị cả thực thể riêng lẻ và kết nối giữa chúng:
Hình trực quan mối quan hệ làm nổi bật cách các mẩu thông tin khác nhau kết nối để tạo thành hồ sơ nhân viên hoàn chỉnh, giúp bạn dễ dàng xác minh rằng AI đã nhận diện và nhóm đúng các chi tiết liên quan từ thông báo gốc.
Sử dụng LangExtract với các nhà cung cấp mô hình khác nhau
LangExtract hoạt động với nhiều nhà cung cấp mô hình AI, mỗi bên có sự đánh đổi giữa chi phí, tốc độ, và độ chính xác. Các mô hình Gemini của Google hoạt động ngay lập tức với hỗ trợ schema tích hợp, khiến chúng trở thành lựa chọn dễ nhất cho hầu hết tác vụ trích xuất. GPT của OpenAI thường cho độ chính xác cao hơn nhưng cần thêm cấu hình và tốn chi phí hơn cho mỗi lần trích xuất.
Để xử lý cục bộ hoặc khi bạn muốn tránh chi phí API, bạn có thể chạy mô hình tại chỗ bằng Ollama. Các mô hình cục bộ phù hợp với các tác vụ trích xuất đơn giản và cho bạn toàn quyền kiểm soát dữ liệu, dù thường chạy chậm hơn và có thể kém chính xác hơn so với tùy chọn trên đám mây.
Mở rộng lên sản xuất
Văn bản ngoài đời thực chẳng giống các ví dụ sạch đẹp của chúng ta. Bạn nhận được các báo cáo 50 trang với định dạng lộn xộn, email khách hàng đầy lỗi chính tả, và PDF khoảng cách kỳ lạ. Một số tài liệu có hàng nghìn từ trải khắp nhiều phần, và thông tin quan trọng có thể bị chôn ở bất cứ đâu.
LangExtract xử lý các tình huống lộn xộn này bằng ba công cụ chính: chạy nhiều tài liệu cùng lúc, thử trích xuất nhiều lần, và chia tài liệu lớn thành phần nhỏ. Thay vì xử lý từng tài liệu một, bạn có thể làm việc trên nhiều tài liệu cùng lúc, giúp mọi thứ nhanh hơn nhiều.
Thiết lập
max_workersđiều khiển số tài liệu được xử lý đồng thời. Nhiều worker hơn nghĩa là nhanh hơn, nhưng cũng tốn nhiều tiền hơn và có thể chạm giới hạn API. Hãy bắt đầu với 10–20 worker và theo dõi.Nhiều lượt trích xuất giúp tìm thông tin có thể bị bỏ lỡ ở lần đầu. LangExtract chạy trích xuất nhiều lần và hợp nhất kết quả. Cách này bắt được nhiều chi tiết hơn nhưng tốn thời gian và chi phí hơn.
Chia tài liệu thành khối giúp xử lý văn bản dài. Thiết lập
max_char_buffercắt tài liệu lớn thành phần nhỏ phù hợp hơn với mô hình AI. Khối nhỏ (1000–2000 ký tự) bắt được nhiều chi tiết hơn, trong khi khối lớn (3000–5000 ký tự) giữ nhiều ngữ cảnh hơn nhưng có thể bỏ sót.Làm việc sản xuất đồng nghĩa đối mặt với sự cố. Tài liệu có thể lỗi mã hóa, kết nối mạng có thể thất bại, và API có thể giới hạn tốc độ xử lý. Hãy theo dõi job trích xuất, thêm logic thử lại cho tài liệu lỗi, và theo dõi chi tiêu trên các nhà cung cấp AI.
Khi làm việc với các loại tài liệu khác nhau, hãy thiết lập quy tắc trích xuất riêng cho từng loại. Hợp đồng pháp lý cần prompt khác email khách hàng. Báo cáo tài chính cần kích thước khối khác bài đăng mạng xã hội. Xây dựng pipeline riêng cho từng loại tài liệu thay vì cố gắng để một hệ thống xử lý tất cả.
LangExtract so với các thư viện NLP khác
LangExtract có cách tiếp cận khác so với các thư viện NLP truyền thống. Trong khi đa số thư viện dựa vào mô hình tiền huấn luyện hoặc hệ thống theo quy tắc, LangExtract sử dụng các Mô hình Ngôn ngữ Lớn có thể hiểu ngữ cảnh và ý nghĩa như con người. Hãy so sánh với ba thư viện NLP Python phổ biến để hiểu khi nào bạn nên chọn LangExtract thay vì các lựa chọn khác.
spaCy
spaCy tập trung vào tốc độ và các tác vụ NLP sẵn sàng cho sản xuất như tách từ, gán loại từ, và nhận dạng thực thể có tên. Nó có các mô hình tiền huấn luyện nhận diện thực thể phổ biến như con người, tổ chức, và địa điểm, nhưng gặp khó với thực thể theo miền hoặc danh mục tùy chỉnh. spaCy xuất sắc trong xử lý lượng lớn văn bản nhanh chóng, nhưng bạn cần huấn luyện lại mô hình hoặc viết quy tắc phức tạp để trích xuất thông tin tùy chỉnh.
LangExtract loại bỏ độ phức tạp này bằng cách cho phép bạn định nghĩa thực thể tùy chỉnh qua ví dụ và prompt đơn giản, đồng thời cung cấp vị trí nguồn chính xác mà spaCy không theo dõi.
NLTK (Natural Language Toolkit)
NLTK (Natural Language Toolkit) được thiết kế cho giáo dục và nghiên cứu, cung cấp nhiều thuật toán và tập dữ liệu NLP. Nó mang đến các khối xây dựng cho xử lý văn bản nhưng đòi hỏi kiến thức lập trình đáng kể để dựng giải pháp hoàn chỉnh. NLTK phù hợp để học khái niệm NLP và thử nghiệm, nhưng để xây hệ thống trích xuất sẵn sàng sản xuất, bạn phải kết hợp nhiều thành phần NLTK và viết nhiều mã.
LangExtract cung cấp giải pháp hoàn chỉnh ngay từ đầu — bạn định nghĩa điều mình muốn qua ví dụ thay vì viết thuật toán, và có hình trực quan tương tác mà không cần phát triển bổ sung.
Transformers (Hugging Face)
Transformers (Hugging Face) cung cấp quyền truy cập các mô hình transformer tối tân cho nhiều tác vụ NLP, gồm nhận dạng thực thể có tên và hỏi đáp. Dù mạnh mẽ, nó đòi hỏi chuyên môn máy học để tinh chỉnh mô hình cho miền cụ thể, và không có sẵn theo dõi nguồn hay trích xuất mối quan hệ. Bạn cần tự triển khai mô hình, quản lý các định dạng mô hình khác nhau, và tự xây công cụ trực quan hóa.
LangExtract loại bỏ sự phức tạp khi làm việc với các mô hình AI khác nhau, tự động xử lý theo dõi nguồn, và cung cấp trích xuất mối quan hệ qua nhóm thuộc tính đơn giản thay vì kiến trúc mô hình phức tạp.
Tính năng
LangExtract
spaCy
NLTK
Transformers
Độ phức tạp thiết lập
Prompt + ví dụ đơn giản
Huấn luyện mô hình/quy tắc
Lập trình thuật toán
Tinh chỉnh mô hình
Thực thể tùy chỉnh
Định nghĩa bằng ngôn ngữ tự nhiên
Cần huấn luyện lại
Viết quy tắc thủ công
Tinh chỉnh mô hình
Theo dõi nguồn
Tự động với vị trí chính xác
Không có
Tự triển khai thủ công
Tự triển khai thủ công
Trích xuất mối quan hệ
Nhóm tích hợp sẵn
Viết quy tắc phức tạp
Lập trình thủ công
Phát triển mô hình tùy chỉnh
Hiểu ngữ cảnh
Dựa trên LLM
Dựa trên mẫu
Dựa trên quy tắc
Phụ thuộc mô hình
Trực quan hóa
HTML tương tác
Cần công cụ ngoài
Cần công cụ ngoài
Cần công cụ ngoài
Độ khó học
Thấp (dựa trên ví dụ)
Trung bình (kiến thức NLP)
Cao (thuật toán)
Cao (chuyên môn ML)
Phù hợp nhất cho
Trích xuất theo miền
Pipeline NLP tổng quát
Nghiên cứu/học tập
Ứng dụng AI tùy chỉnh
Kết luận
LangExtract biến việc trích xuất văn bản từ viết quy tắc phức tạp thành trao đổi với AI về dữ liệu của bạn. Bạn đã học cách thiết lập trích xuất thực thể tùy chỉnh bằng prompt và ví dụ đơn giản, nhóm thông tin liên quan qua trích xuất mối quan hệ, và tạo hình trực quan tương tác cho thấy chính xác nguồn gốc của từng mẩu dữ liệu. Thư viện xử lý các thách thức sản xuất như xử lý song song và chia khối tài liệu, giúp nó thực tiễn cho các ứng dụng đời thực với văn bản lộn xộn, thiếu nhất quán.
Dù bạn đang xử lý phiếu hỗ trợ khách hàng, phân tích tài liệu pháp lý, hay trích xuất insight từ bài báo nghiên cứu, LangExtract mang đến cách tiếp cận trực quan hơn so với các thư viện NLP truyền thống. Thay vì tốn thời gian huấn luyện mô hình hay viết quy tắc, bạn có thể tập trung vào định nghĩa thông tin quan trọng cho trường hợp sử dụng cụ thể. Hãy bắt đầu bằng các trích xuất đơn giản trên dữ liệu văn bản của riêng bạn, rồi mở rộng bằng các kỹ thuật sản xuất được đề cập trong hướng dẫn này.