Skip to main content

Evaluation of Relation Hallucination in Abstractive Summarization:

Features

1. Relation Extraction for Varied Models

Comprehensive SVO Relation Extraction

  • Extracts Subject-Verb-Object (SVO) relations from:
    • Input Text (InputText)
    • Reference Summaries (ReferenceSummary)
    • Model-Generated Summaries for varied models.
  • Includes confidence levels for each extracted relation to ensure reliability.

2. Computing Hallucination Factors

Advanced Hallucination Metrics

  • Evaluates hallucination tendencies in model-generated summaries based on:
    • Relation overlaps between InputText, ReferenceSummary, and model summaries.
  • Computes custom hallucination metrics dynamically for each model:
    • Precision
    • Recall
    • F1 Score
    • 6 Hallucination metrics namely Extractiveness factor , Negative and Postive Hallucinations , Lost Hallucinations and Lost Focus, Overfocus factor

Relation Matching

  • Converts extracted SVO relations into structured tuples to facilitate direct comparison.
  • Measures hallucination factors based on relation alignment or mismatch.

3. Additional Highlights

Multi-Model Compatibility

  • Easily integrates summaries from multiple models in a single dataset.
  • Provides comparative metrics for each model’s output.

Customizable Field Mapping

  • Allows flexible mapping of fields for datasets with varying structures.
  • Ensures compatibility with diverse data formats.

Efficient Processing

  • Handles both single-entry and batch processing.
  • Scalable for datasets of any size, from small samples to large datasets.

Usage

This framework and package is designed for researchers and developers working on abstractive summarization and hallucination analysis, offering robust tools for multi-model evaluation and relation extraction in text summarization models.

Installation

Please install our package using following command:

pip install Relation_Hallucination

Functionality 1:

Processing the single data and batch data for Relation Hallucination in text summarization models using our pacakage:

package name: process_text_and_compute_metrics

How to import?

from RHI_Metrics import process_text_and_compute_metrics

What feature and functionality this provides?

  • Extract SVO Relations: Extracts Subject-Verb-Object relations with confidence scores from input text, reference summary, and model-generated summaries.
  • Compute ROUGE Scores: Computes ROUGE-1, ROUGE-2, and ROUGE-L scores for model-generated summaries against the reference summary.
  • Compute Hallucination Metrics: Computes metrics related to hallucinations, including precision, recall, F1 score, 6 factors namely Extractiveness factor , Negative and Postive Hallucinations , Lost Hallucinations and Lost Focus, Overfocus factor respectively and more, by comparing generated and reference SVO relations.
  • Supports Single and Batch Processing: Can process individual entries or a list of entries in batch mode.
  • Customizable Field Mapping: Allows customization of field names for input text and reference summary.

Installation

These are the packages need to be installed:

pip install nltk rouge-score rouge-score numpy pandas scipy transformers matplotlib seaborn streamlit

python -m spacy download en_core_web_sm

How to Use?

** Function: process_text_and_compute_metrics **

This function processes JSON data to extract relations, compute ROUGE scores, and hallucination metrics. It works for both single-entry and batch processing.

Function Strcture:

How to import??

from Relation_Hallucination.RH_Metrics import process_text_and_compute_metrics

def process_text_and_compute_metrics(

data: Union[Dict, List[Dict]],

batch_mode=True,

field_mapping: Dict = None

) -> List[Dict]:

Arguments:

  • data (Union[Dict, List[Dict]]):
    • For batch processing (batch_mode=True), provide a list of dictionaries where each dictionary represents an entry.
    • For single-entry processing (batch_mode=False), provide a single dictionary.
  • batch_mode (bool, default=True):
    • If True, processes multiple entries.
    • If False, processes a single entry.
  • field_mapping (Dict, optional):
    • A dictionary to map custom field names for input text and reference summary.
      Example: {"input_text": "textInput", "reference_summary": "summaryReference"}.

Returns:

  • List[Dict]: A list of processed entries containing extracted relations, ROUGE scores, and hallucination metrics for each model.

Example

Single Entry Processing:

from Relation_Hallucination.RH_Metrics  import process_text_and_compute_metrics

data = {
    "textInput": "This is an input text.",
    "summaryReference": "This is a reference summary.",
    "facebook/bart-large-cnn": "Generated summary by BART.",
    "google/pegasus-xsum": "Generated summary by Pegasus."
}

field_mapping = {
    "input_text": "textInput",
    "reference_summary": "summaryReference"
}

result = process_text_and_compute_metrics(data, batch_mode=False, field_mapping=field_mapping)
print(result)

For Batch Processing here is an example below:

json_data = [
    {
        "textInput": "This is input text for the first entry.",
        "summaryReference": "This is the reference summary for the first entry.",
        "facebook/bart-large-cnn": "Generated summary by BART.",
    },
    {
        "content": "This is input text for the second entry.",
        "ref_summary": "This is the reference summary for the second entry.",
        "google/pegasus-xsum": "Generated summary by Pegasus.",
    }
]

field_mapping = {
    "input_text": "textInput",
    "reference_summary": "summaryReference"
}

result = process_text_and_compute_metrics(json_data, batch_mode=True, field_mapping=field_mapping)
print(result)

Customizing Field Names

If your JSON data or your data uses different field names for input text and reference summary, you can provide a custom field mapping dictionary.

field_mapping = {
    "input_text": "customInputTextField",
    "reference_summary": "customReferenceSummaryField"
}

Sample Data Format

{
  "0": {
    "Id": "10157432",
    "dataset": "xlsum",
    "InputText": "The announcement makes Italy the latest eurozone country to announce cuts in an effort to reduce the gap between spending and earnings. The UK and Danish governments also this week announced plans to curb spending. Italy will take measures to reduce public sector pay and will put a freeze on new recruitment. Public sector pensions and local government spending are also expected to be hit. Added to these, a clampdown on tax avoidance is also planned. The cuts are equal to some 1.6% of gross domestic product (GDP). Similar reductions in spending measures have already been announced by Greece, Spain and Portugal. Heavy price Some Italian workers have already been out protesting. In Rome, workers at the Italian Institute for the Professional Development of Vocational Training of Workers (Isfol) held protests against the cuts at their headquarters. One worker, Simone Casadei, said the public sector had already paid a heavy price. The sector of public research has already paid its toll and suffered cuts in the past, he said. So we are asking for our sector to be left out of the new budget cuts. He added that the money should be raised by getting tough on tax evasion. We also demand that the money needed to face this problems... is obtained through a tough action against tax evasion. The state cannot always take the money from the same sources, that is workers and pensioners. The government hopes to bring its deficit down to below 3% of GDP by 2012 - from 5.3% now - in order to help maintain the confidence of international investors and prevent the spread of a Greek-style debt crisis. Concerns over the level of Greece's debts have led to an effective boycott of Greek debt on the world markets, and have spilled over into deepening worries about the other weakest members of the 16-nation eurozone: Spain, Portugal and Italy.",
    "ReferenceSummary": "The Italian government has approved austerity measures worth 24 billion euros (\u00a320bn; $29bn) for the years 2011-2012.",
    "facebook/bart-large-cnn": "Italy will take measures to reduce public sector pay and will put a freeze on new recruitment. Public sector pensions and local government spending are also expected to be hit. The cuts are equal to some 1.6% of gross domestic product (GDP) Similar reductions in spending measures have already been announced by Greece, Spain and Portugal.",
    "google/pegasus-xsum": "The Italian government has announced plans to cut public sector spending by 20bn (\u00a314bn; $22bn) over the next two years.",
    "t5-large": "the cuts are equal to some 1.6% of gross domestic product (gdp) similar reductions in spending measures have already been announced by Greece, Spain and Portugal. the government hopes to bring its deficit down to below 3% of GDP by 2012.",
    "gpt-3.5-turbo": "Italy has announced public sector spending cuts of 1.6% of GDP in an attempt to reduce the gap between spending and earnings and to bring its deficit down to below 3% of GDP by 2012. Measures will include a reduction in public sector pay, a freeze on new recruitment, a clampdown on tax avoidance as well as cuts to public sector pensions and local government spending. Italy becomes the latest eurozone country to announce such cuts after similar moves made by Greece, Spain and Portugal. Although the government hopes to prevent the spread of a Greek-style debt crisis, the proposed austerity measures have already drawn protests from some public sector workers.",
    "RefSum": "The Italian government has approved austerity measures worth 24 billion euros (\u00a320bn; $29bn) for the years 2011-2012."
  }
}

Explanation of Fields:

  • Id: Unique identifier for the data sample.
  • dataset: The dataset source (e.g., xlsum).
  • InputText: The input article or passage used as the base for summarization.
  • ReferenceSummary: The gold-standard reference summary.
  • facebook/bart-large-cnn, google/pegasus-xsum, t5-large, gpt-3.5-turbo: Summaries generated by different models.
  • RefSum: Alternative representation of the reference summary (same as ReferenceSummary in this example).

Computation of Hallucination metrics Separately Using _ calculate_hallucination_factors_:

Package name: calculate_hallucination_factors

Function Parameters:

pred_words: Tokenized predicted (generated) words. ref_words: Tokenized reference summary words. inp_words: Tokenized input text words.

input_relations: SVO relations extracted from the input text. ref_relations: SVO relations extracted from the reference summary. model_relations: SVO relations extracted from the predicted summary.

Function Output: Returns a dictionary containing:

Metrics:

precision: Precision of the generated relations. recall: Recall of the generated relations. f1_score: F1 score for the generated relations. ef (Extractiveness Factor): Measures overlap between input, reference, and generated relations. ph (Positive Hallucination): Evaluates agreement between reference and generated relations. of (Over Focus): Quantifies excessive focus on input relations. nh (Negative Hallucination): Reflects spurious content in generated relations. lf (Lost Focus): Indicates missing content from reference relations. lh (Lost Hallucination): Highlights divergence between input and generated relations. rhi (Relation Hallucination Index): A composite metric summarizing hallucination behavior. Intersection Counts:

I_intersect_R_count: Overlap between input and reference relatzions. I_intersect_G_count: Overlap between input and generated relations. R_intersect_G_count: Overlap between reference and generated relations. I_intersect_R_intersect_G_count: Triple overlap between input, reference, and generated relations.

Set Lengths:

lenI: Length of input relations set. lenR: Length of reference relations set. lenG: Length of generated relations set.

from Relation_Hallucination.RH_Metrics  import calculate_hallucination_factors
pred_words=["The", "Eiffel", "Tower", "is", "a", "landmark"],
ref_words=["Eiffel", "Tower", "is", "a", "famous", "landmark"],
inp_words=["The", "Eiffel", "Tower", "is", "a", "famous", "site"],
input_relations=[("Eiffel Tower", "is", "landmark")],
ref_relations=[("Eiffel Tower", "is", "famous landmark")],
model_relations=[("Eiffel Tower", "is", "landmark")]

metrics = calculate_hallucination_factors(pred_words, ref_words, inp_words, input_relations, ref_relations, model_relations)

print(metrics)

Extracting Relations for Any Given Text

This package includes a powerful algorithm to extract Subject-Verb-Object (SVO) relations from any text with confidence scores. You can use the following function to extract these relations:

Function Name:

extract_relations_and_svo_with_confidence_score(input_text)

HOw to import??

from Relation_Hallucination.RH_Metrics import xtract_relations_and_svo_with_confidence_score

Parameters:

  • text: The input text for which you want to extract SVO relations.
  • confidence_threshold: (Optional, default = 0.5) The minimum confidence score required for a relation to be included in the output.

Usage:

Pass your input text and the desired confidence threshold to the function to extract relations.

Example:

from Relation_Hallucination.RH_Metrics import extract_relations_and_svo_with_confidence_score

# Input text
text = "The Italian government has approved austerity measures worth 24 billion euros for the years 2011-2012."

# Extract relations with a confidence threshold of 0.6
relations = extract_relations_and_svo_with_confidence_score(text, confidence_threshold=0.6)

# Sample Output
print(relations)

```
[
{"subject": "Italian government", "verb": "approved", "object": "austerity measures", "confidence": 0.8},
{"subject": "austerity measures", "verb": "worth", "object": "24 billion euros", "confidence": 0.75}
]

Function for Rouge score:

from Relation_Hallucination.RH_Metrics import compute_all_rouge_scores

If you want calculate only rouge score for your data then use function compute_all_rouge_scores(predicted, reference)

pass the function with generated summary and reference text

Conclusion

This package serves as a comprehensive tool for evaluating relation hallucination in abstractive summarization models. By focusing on Subject-Verb-Object (SVO) relations, it provides detailed metrics to measure and compare model behavior, helping researchers identify and mitigate hallucination issues in generated summaries.

The flexibility of batch processing, customizable field mappings, and compatibility with multiple models makes it suitable for handling diverse datasets and research requirements. With features like precision metrics, hallucination factors, and multi-model analysis, this package offers valuable insights for improving the reliability and quality of abstractive text summarization systems.

Contributions, suggestions, and enhancements are always welcome. Together, we can refine and expand the capabilities of this package for the benefit of the research community.

Metadata

Release files for Relation-Hallucination 0.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for Relation-Hallucination 0.0.1
File Size Uploaded Provenance
relation_hallucination-0.0.1.tar.gz 17.5 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for Relation-Hallucination 0.0.1
File Interpreter ABI Platform
Relation_Hallucination-0.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 30.4 kB

Release files / relation_hallucination-0.0.1.tar.gz

Download URL relation_hallucination-0.0.1.tar.gz
Size 17.5 kB
Tags Source
SHA-256 checksum
How to use checksums
785ba0ed38ffa5e0e86f7a44cf096e2b77b373173d22356569a02e617ee9d80b
BLAKE2b-256 checksum
How to use checksums
2c2277b0cfd25807b94be3b66cecc8a9ffe21e3de65a5aea3ce98440376b3d70
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.11.1

Release files / Relation_Hallucination-0.0.1-py3-none-any.whl

Download URL Relation_Hallucination-0.0.1-py3-none-any.whl
Size 12.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bb71bba20461fa3a9be83315624c353a15efe37de7e56a386f9412f668c2af5b
BLAKE2b-256 checksum
How to use checksums
203e901f3212c254983af92d261a6e90437ffdf1a5712d6175cdb3a479225d53
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.11.1

Security for Relation-Hallucination 0.0.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.0.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page