تقييم ذاتي للمطالبة
بفضل الورقة 2507.21046v3
أرني الكود
لجعل وكيل الترجمة الخاص بنا يقوم بالتقييم الذاتي، يمكننا المحاولة مع الكشف التلقائي عن الأسماء الصحيحة. طلب السحب (PR) لهذا المستودع على رابط
الفكرة الأساسية هي أن المطالبة تحتوي على جزء ديناميكي مثل الأسماء الصحيحة، ماذا لو طلبنا من LLM الكشف تلقائيًا عن أسماء صحيحة جديدة ودمجناها معًا في الجولة/القطعة التالية من المهام؟
تصميم قابل للتكوين
بما أن هذا وكيل i18n (تدويل)، لسهولة التبني مع مشاريع مختلفة، في مراحل التصميم، تم الاحتفاظ بـ RESERVED WORD
كـ Glossary
(قاموس مصطلحات).
في خطوات ضمان الجودة
في المطالبة، تم تعريفها كالتالي:
خطوات ضمان الجودة
...
- عند مواجهة مصطلحات تقنية غامضة أو أسماء صحيحة، قدم تفسيرات موجزة بين قوسين (يرجى الرجوع إلى الكلمة المحجوزة المقدمة من المستخدم)
عند التعامل مع ترجمة محتوى، يتواصل مع LLM كالتالي:
# مطالبة النظام
LLM_Client.get_config()["prompts"]["translator"],
# المحتوى
يرجى المساعدة في ترجمة المحتوى التالي إلى الصينية، الكلمة المحجوزة: كلمة محجوزة 0، كلمة محجوزة 1...كلمة محجوزة n باللغة الإنجليزية.
هذا هو الجزء 1 من 10 من المستند.
تنسيق الإخراج JSON مثال:
{
"content": "نص مترجم هنا...",
"metadata": {{"chunk": {i+1}, "total": {len(chunks)}}},
}
المحتوى للترجمة:
"Hello Transformer"
فائدة التصميم القابل للتكوين، "Transformer" هو فيلم أم ... الاهتمام هو كل ما تحتاجه؟
قبل أن ننفذ مطالبة التقييم الذاتي، لنقل أن لدينا مستودع A ومستودع B يحتاجان إلى الترجمة. المستودع A متعلق بالأفلام، والمستودع B هو مستند LLM، لذا المحتوى هو:
# المحتوى
يرجى المساعدة في ترجمة المحتوى التالي إلى الصينية، الكلمة المحجوزة: LLM باللغة الإنجليزية.
هذا هو الجزء 1 من 10 من المستند.
تنسيق الإخراج JSON مثال:
{
"content": "نص مترجم هنا...",
"metadata": {{"chunk": {i+1}, "total": {len(chunks)}}},
}
المحتوى للترجمة:
"Hello Transformer"
الاهتمام هو كل ما تحتاجه، أليس كذلك؟
انتظر دقيقة... هل يمكننا تحسين العملية عبر "الاهتمام الذاتي"؟ لنعد إلى مهمة ترجمة المستند. افترض أن لدينا 10 قطع لمستند. بدلاً من قراءة ملفات Glossary أو التكوين اليدوي. تلك الكلمات في Glossary، تظهر/تُستخدم في المستند، أليس كذلك؟
Glossary = المعارف في LLM + التكوين (سواء في ملف Glossary أو إدخال يدوي) + الأسماء الصحيحة (تظهر في المستند)
لمهمة الترجمة، سنرسل المستند إلى LLM، أليس كذلك؟
ماذا لو طلبنا من LLM التقاط الأسماء الصحيحة في القطعة السابقة واستخدام تلك الأسماء الصحيحة كـ Glossary للقطع التالية؟
ها نحن ذا
الخطوة 0 تحديث مطالبة النظام
في جزء خطوات المهمة من مطالبة النظام، اطلب من LLM التقاط الأسماء الصحيحة.
منهجية الترجمة:
...
- ابحث عن المصطلحات الخاصة بالمجال في اللغة الهدف عند الحاجة، اذكر أي أسماء صحيحة كنتيجة.
الخطوة 1 أضف متغيرًا لالتقاط الأسماء الصحيحة من LLM
غيّر هيكل الإخراج ليكون
تنسيق الإخراج JSON مثال:
{
"content": "نص مترجم هنا...",
"metadata": {{"chunk":
{
"content": "النص المترجم هنا...",
"metadata": {{"chunk": {i+1}, "total": {len(chunks)}}},
"proper_nouns": "proper nouns 0, proper nouns 1..."
}
#### اختبار
تم الاختبار باستخدام [diffuser](https://github.com/huggingface/diffusers/pull/12179)
قيمة التكوين اليدوية هي `Diffusers, stable_diffusion, consisid, colab`.
من السجل، نرى الأسماء الصحيحة المكتشفة كـ
`Diffusers, stable_diffusion, consisid, colab, diffusion, ModularPipeline, YiYiXu, modular-diffdiff, modular-diffdiff-0704, DiffDiffBlocks`
والتي يمكننا البدء بالخطوة 2 كدمج الأسماء الصحيحة كـ i18n-agent-action.
### الخطوة 2 دمج الأسماء الصحيحة و i18n-agent-action
إليك نموذج دالة التنفيذ لدمج الأسماء الصحيحة (كاستجابة من LLM) و i18n-agent-action
```python
def MergePN(str1, str2):
# تقسيم وإزالة التكرار مع الحفاظ على الترتيب
merged = list(OrderedDict.fromkeys(
[item.strip() for item in str1.split(",")] +
[item.strip() for item in str2.split(",")]
))
result = ", ".join(merged)
return result
النتيجة
بالعودة إلى قصتنا، دعنا نرى من القطعة الأولى "Hello Transformer"
، استجاب لنا LLM بالأسماء الصحيحة كـ Transformer
، وفي القطعة الثانية، الحديث يبدو كالتالي:
#المحتوى
Please help translate the following content into Chinese, reserved word: Transformer, LLM in English.
This is part 2 of 10 of the document.
Example json output format:
{
"content": "translated text here...",
"metadata": {{"chunk": {i+1}, "total": {len(chunks)}}},
}
Content to translate:
"Transformer from paper attention is all you need, and widely used as LLM...."
لقطة شاشة السجل
حالة من العالم الحقيقي
يمكننا أن نرى أنه احتفظ تلقائيًا بـ DeepFloyd IF، بدلاً من DeepFloyd 如果
أو 深度弗洛伊德 如果