Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Why are entities extracted from examples, and how can I avoid them #233

Open
NaiveteYaYa opened this issue Oct 8, 2023 · 8 comments
Open

Comments

@NaiveteYaYa
Copy link

Why are entities extracted from examples, and how can I avoid them

@eyurtsev
Copy link
Owner

Hi @NaiveteYaYa, likely this is because the LLM is making a mistake.

Could you share an example of code you're using? I may be able to help you improve the results

@ahmed-bhs
Copy link

Facing same issue !

@eyurtsev
Copy link
Owner

@NaiveteYaYa / @ahmed-bhs please share a snippet of code. It's hard to know how to help without having context :) What code are you using and which LLM?

@eyurtsev
Copy link
Owner

Absent other information for other folks bumping into issues please refer to the guidelines: https://eyurtsev.github.io/kor/guidelines.html

@ahmed-bhs
Copy link

@eyurtsev thank you for your help, I really appreciate, SO the context, that I' mextracting chimichal inforamtion from a raw text. This is my prompt, you can test it using chatgpt:

Your goal is to extract structured information from the user's input that matches the form described below. When extracting information please make sure it matches the type information exactly. Do not add any attributes that do not appear in the schema shown below.

```TypeScript

information: { // Extracting chemichal informations for an fds file. Please filter and remove duplicate items.
 product_name: string // Nom du produit chimique
 manufacturer_name: string // Le nom du fornisseur
 phrase_euh: Array // 6-character code for additional information statements (EUH phrases). pattern: ^EUH\d{3}$'
 phrase_h: Array // Code à 4 caractères pour les mention de danger (phrases H). pattern: ^H\d{3}$
 phrase_ghs: Array // Code à 5 caractères pour les pictogrammes de danger (phrases GHS). pattern: ^GHS\d{3}$
 phrase_p: Array // Code à 4 caractères pour les conseils de prudence (phrases P). pattern: ^(P\d+(\s*\+\s*P\d+)*)$
 substances: Array<{ // les paires code CAS et code EC des substances. 
  ec: string // 
  cas: string // 
 }>
 warning_notice: string // Mention d’avertissement, par défaut NA. pattern: '/DANGER|ATTENTION|NA/
}

Please output the extracted information in JSON format. Do not output anything except for the extracted information. Do not add any clarifying information. Do not add any fields that are not in the schema. If the text contains attributes that do not appear in the schema, please ignore them. All output must be in JSON format and follow the schema specified above. Wrap the JSON in  tags.



Input: [user input]
Output:

This is the [user input] (it's in frensh language):
["RUBRIQUE 1 : IDENTIFICATION DE LA SUBSTANCE/DU MÉLANGE ET DE LA SOCIÉTÉ/L´ENTREPRISE\n1.1. Identificateur de produit\nNom du produit : TUV IDROTOP VELOURS\nCode du produit : 3t25729\n1.2. Utilisations identifiées pertinentes de la substance ou du mélange et utilisations déconseillées\nAPPLICATION DE PEINTURE : GRAND PUBLIC & PROFESSIONNEL\n1.3. Renseignements concernant le fournisseur de la fiche de données de sécurité\nRaison Sociale : CROMOLOGY SERVICES\nAdresse : 71, Boulevard du General Leclerc. 92583 CLICHY CEDEX FR\nTéléphone : 01 41 27 62 00. Fax: 01 41 27 62 01. Telex: .\n\n1.4. Numéro d´appel d´urgence : +33 (0)1 45 42 59 59.\nSociété/Organisme : INRS ORFILA .\nAutres numéros d'appel d'urgence\nCentres antipoison (24h/24) Belgique : +32 70 245 245 et Suisse : +41 44 251 51 51 (En Suisse composer le 145)\n", "RUBRIQUE 2 : IDENTIFICATION DES DANGERS\n2.1. Classification de la substance ou du mélange\nConformément au règlement (CE) n° 1272/2008 et ses adaptations.\nPeut produire une réaction allergique (EUH208).\nCe mélange ne présente pas de danger physique. Voir les préconisations concernant les autres produits présents dans le local.\nCe mélange ne présente pas de danger pour l'environnement. Aucune atteinte à l'environnement n'est connue ou prévisible dans les conditions\nnormales d'utilisation.\n2.2. Éléments d´étiquetage\nConformément au règlement (CE) n° 1272/2008 et ses adaptations.\nEtiquetage additionnel :\nEUH208 Contient 1,2-BENZISOTHIAZOL-3(2H)-ONE. Peut produire une réaction allergique.\nEUH208 Contient MASSE DE REACTION DE 5-CHLORO-2-METHYL-2H-ISOTHIAZOL-3-ONE ET DE\n2-METHYL-2H-ISOTHIAZOL-3-ONE (3:1). Peut produire une réaction allergique.\nEUH208 Contient 2-METHYLISOTHIAZOL-3(2H)-ONE. Peut produire une réaction allergique.\nEUH211 Attention! Des gouttelettes respirables dangereuses peuvent se former lors de la\npulvérisation. Ne pas respirer les aérosols ni les brouillards.\nConseils de prudence - Généraux :\nP102 Tenir hors de portée des enfants.\nConseils de prudence - Prévention :\nP271 Utiliser seulement en plein air ou dans un endroit bien ventilé.\nP273 Éviter le rejet dans l’environnement.\nConseils de prudence - Elimination :\nP501 Éliminer le contenu/récipient dans un centre de collecte des déchets dangereux ou spéciaux.\n2.3. Autres dangers\nLe mélange ne contient pas de 'Substances extrêmement préoccupantes' (SVHC)>= 0.1% publiées par l´Agence Européenne des Produits\nChimiques (ECHA) selon l´article 57 du REACH : \nLe mélange ne répond pas aux critères applicables aux mélanges PBT ou vPvB, conformément à l'annexe XIII du règlement REACH (CE) n°\n1907/2006.\n", "RUBRIQUE 3 : COMPOSITION/INFORMATIONS SUR LES COMPOSANTS\n3.2. Mélanges\nComposition :\nIdentification (CE) 1272/2008 Nota %\nINDEX: 022-006-00-2 GHS08 [1] 2.5 <= x % < 10\nCAS: 13463-67-7 Wng [10]\nEC: 236-675-5 Carc. 2, H351\nMade under licence of European Label System, Software of INFODYNE ( )\nQuick-FDS [19302-39771-06888-011245] - 2020-11-04 - 11:02:52TUV IDROTOP VELOURS - 3t25729\nDIOXYDE DE TITANE [SOUS LA\nFORME D'UNE POUDRE CONTENANT 1\n% OU PLUS DE PARTICULES D'UN\nDIAMETRE <= 10 µM]\nINDEX: 613-088-00-6 GHS05, GHS07, GHS09 0 <= x % < 0.05\nCAS: 2634-33-5 Dgr\nEC: 220-120-9 Acute Tox. 4, H302\nSkin Irrit. 2, H315\n1,2-BENZISOTHIAZOL-3(2H)-ONE Eye Dam. 1, H318\nSkin Sens. 1, H317\nAquatic Acute 1, H400\nM Acute = 1\nINDEX: 613-167-00-5 GHS06, GHS05, GHS09 B 0 <= x % < 0.0015\nCAS: 55965-84-9 Dgr\nAcute Tox. 3, H301\nMASSE DE REACTION DE Acute Tox. 2, H310\n5-CHLORO-2-METHYL-2H-ISOTHIAZOL Skin Corr. 1C, H314\n-3-ONE ET DE Skin Sens. 1A, H317\n2-METHYL-2H-ISOTHIAZOL-3-ONE Eye Dam. 1, H318\n(3:1) Acute Tox. 2, H330\nAquatic Acute 1, H400\nM Acute = 100\nAquatic Chronic 1, H410\nM Chronic = 100\nEUH:071\nINDEX: 613-326-00-9 GHS06, GHS05, GHS09 0 <= x % < 0.1\nCAS: 2682-20-4 Dgr\nEC: 220-239-6 Acute Tox. 3, H301\nAcute Tox. 3, H311\n2-METHYLISOTHIAZOL-3(2H)-ONE Skin Corr. 1B, H314\nSkin Sens. 1A, H317\nEye Dam. 1, H318\nAcute Tox. 2, H330\nAquatic Acute 1, H400\nM Acute = 10\nAquatic Chronic 1, H410\nM Chronic = 1\nEUH:071\n(Texte complet des phrases H: voir la section 16)\nInformations sur les composants :\n[1] Substance pour laquelle il existe des valeurs limites d'exposition sur le lieu de travail.\nNote 10 : La classification en tant que cancérogène par inhalation s´applique uniquement aux mélanges sous forme de poudre contenant 1 % ou\nplus de dioxyde de titane qui se présente sous la forme de particules ou qui est incorporé dans des particules ayant un diamètre aérodynamique\n<= 10 µm.\n"]

This is the output result, as you see "phrase_ghs" contain duplicated items:

{
  "information": {
    "product_name": "TUV IDROTOP VELOURS",
    "manufacturer_name": "CROMOLOGY SERVICES",
    "phrase_euh": [
      "EUH208",
      "EUH208",
      "EUH208",
      "EUH211"
    ],
    "phrase_h": [],
    "phrase_ghs": [
      "GHS08",
      "GHS05",
      "GHS07",
      "GHS09",
      "GHS05",
      "GHS09",
      "GHS06",
      "GHS05",
      "GHS09",
      "GHS06",
      "GHS05",
      "GHS09"
    ],
    "phrase_p": [
      "P102",
      "P271",
      "P273",
      "P501"
    ],
    "substances": [
      {
        "ec": "236-675-5",
        "cas": "13463-67-7"
      },
      {
        "ec": "220-120-9",
        "cas": "2634-33-5"
      },
      {
        "ec": "220-239-6",
        "cas": "2682-20-4"
      }
    ],
    "warning_notice": "NA"
  }
}

This a par of my code:

    schema = Object(
        id="information",
        description=(
            "Extracting chemichal informations for an fds file. Please filter and remove duplicate items."
        ),
        attributes=[
            Text(
                id="product_name",
                description="Nom du produit chimique",
                                default="NA"
            ),
            Text(
                id="manufacturer_name",
                description="Le nom du fornisseur",
                default="NA"
            ),


            Text(
                id="phrase_euh",
                description="6-character code for additional information statements (EUH phrases). pattern: ^EUH\d{3}$'",
                examples=[
                ],
                default=[],
                many=True,
            ),
            Text(
                id="phrase_h",
                description="Code à 4 caractères pour les mention de danger (phrases H). pattern: ^H\d{3}$",
                examples=[],
                default=[],
                many=True,
            ),
            Text(
                id="phrase_ghs",
                description="Code à 5 caractères pour les pictogrammes de danger (phrases GHS). pattern: ^GHS\d{3}$",
                examples=[],
                default=[],
                many=True,
            ),
            Text(
                id="phrase_p",
                description="Code à 4 caractères pour les conseils de prudence (phrases P). pattern: ^(P\d+(\s*\+\s*P\d+)*)$",
                examples=[],
                default=[],
                many=True,
            ),
            Object(
                id="substances",
                description="les paires code CAS et code EC des substances. ",
                attributes=[
                    Text(id="ec"),
                    Text(id="cas"),
                ],
                default=[],
                many=True
                ),
                Text(
                    id="warning_notice",
                    description="Mention d’avertissement, par défaut NA. pattern: '/DANGER|ATTENTION|NA/",
                ),

        ],
        many=False,
    )

    prompt = ChatPromptTemplate.from_messages(
        [
            ("system", "You are a language detection bot specialized in extracting information from FDS text."),

        ]
    )
    llm = ChatOpenAI(model="gpt-3.5-turbo-16k", temperature=0.2, model_kwargs = {
                                                                       'frequency_penalty':0,
                                                                       'presence_penalty':0,
                                                                       'top_p':0.1
                                                                   })
    chain = create_extraction_chain(llm, schema, encoder_or_encoder_class='json', verbose=False)
    with get_openai_callback() as cb:
        response = chain.run(user_input_text))
        print(response)
        

Cheers!

@eyurtsev
Copy link
Owner

@ahmed-bhs

Follow the guidelines here: https://eyurtsev.github.io/kor/guidelines.html

  1. Add examples -- the prompt has no examples (using the examples attribute) -- these can significantly improve performance.
  2. Benchmark with a better model (gpt-4)
  3. reduce the temperature to 0 (don't add noise to the extraction with temperature = 0.2).

Also if the codes have a standardized format, consider mixing in approaches with regular expressions.

Eugene

@ahmed-bhs
Copy link

@eyurtsev thank you for your answer, could you give an example about how i can mix approaches with regular expressions ?

@Sachin-Bhat
Copy link
Contributor

You could experiment by adding more guardrails as well to avoid the duplication issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants