Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 87 additions & 0 deletions recipe/0514-ml-usage-tags/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
---
title: IIIF ML/AI Usage Tags Recipe
id:
layout: recipe
tags: [rights, requiredStatement]
summary: "Ethical ML/AI Use Tags for IIIF Manifests"
viewers:
- Mirador
- UV
topic:
- text
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The topics can only be one of the following

  • basic
  • property
  • note
  • structure
  • annotation
  • image
  • AV
  • realWorldObject
  • geo-recipes
  • content-state

I think I would go for note at the moment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Got it, just changed to note, thanks Glen.

- presentation
property: rights, requiredStatement
---

## Use Case

Similar to the initiatives crafted by other content communities in efforts to limit the scraping of images and text using “noai” and “noimageai” meta HTML tags, users of the IIIF APIs may consider implementing a set of tags their IIIF manifests to help better regulate ML/AI content scraping and non-consented or attributed use of IIIF powered content in ML/AI applications.

## Implementation Notes

Use of these standardized ML/AI Usage tags in IIIF Manifests will always need to be paired with sophisticated, up-to-date DevOps and data security practices within the context of a repository environment.

Recommendation to use a single applicable tag, based on the particular concerns associated with an asset's use in ML/AI applications.

#### For humans, within [`requiredStatement`](https://iiif.io/api/presentation/3.0/#requiredstatement)

```JSON
{
"requiredStatement": {
"label": { "en": [ "No AI" ] },
"value": { "en": [ "Material related to this IIIF Manifest should not be used for AI or ML training datasets." ] }
}
}
```
```JSON
{
"requiredStatement": {
"label": { "en": [ "No Image AI" ] },
"value": { "en": [ "Image-based material related to this IIIF Manifest should not be used for AI or ML training datasets." ] }
}
}
```
```JSON
{
"requiredStatement": {
"label": { "en": [ "Regulated ML/AI Use Permitted - Attribution Required" ] },
"value": { "en": [ "Material related to this IIIF Manifest may be used for AI or ML training datasets, as long as Standard Attribution of source content is maintained for the ML/AI dataset. Original URL of source IIIF manifest must be maintained and referenced." ] }
}
}
```
```JSON
{
"requiredStatement": {
"label": { "en": [ "Regulated ML/AI Use Permitted - Consent Required" ] },
"value": { "en": [ "Material related to this IIIF Manifest may be used for AI or ML training datasets, if Prior Written Consent is obtained from the source holding institution. Standard Attribution of source content must be maintained for the ML/AI dataset. Original URL of source IIIF manifest must be maintained and referenced." ] }
}
}
```

#### For machines, within [`rights`](https://iiif.io/api/presentation/3.0/#rights)

* URIs to be pursued for machineable interactions, pending further discussions within the IIIF and wider repository communities during Summer 2024 and onwards.

#### Additional Considerations

* Simple use cases (apply per manifest) versus complex uses casses (apply per item/canvas)

* IIIF is an API based framework, geared to machine mediated interactions but: **IIIF resources are for humans**

* As we, professionally and personally, decide to use or integrate ML/AI tools into our repositories, we need to keep in mind our curatorial legacies and the complex nature of our own content.

* ML/AI technology will continue to shift over time and require diligent application and monitoring, for the rest of our professional lives.

## Restrictions

No known restrictions.

## Example

{% include manifest_links.html manifest="manifest.json" %}

{% include jsonviewer.html src="manifest.json" config='data-line="30-39"' %}

## Related Recipes

* [Rights][0008] for demonstrating use of `rights` and `requiredStatement`
78 changes: 78 additions & 0 deletions recipe/0514-ml-usage-tags/manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
{
"@context": "http://iiif.io/api/presentation/3/context.json",
"id": "{{ id.url }}",
"type": "Manifest",
"label": {
"en": [
"Picture of Göttingen taken during the 2019 IIIF Conference"
]
},
"summary": {
"en": [
"<p>Picture taken by the <a href=\"https://github.com/glenrobson\">IIIF Technical Coordinator</a></p>"
]
},
"rights": "http://creativecommons.org/licenses/by-sa/3.0/",
"requiredStatement": [
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think requiredStatement can be an array I think it needs to be a JSON object. So to get it to validate if you can remove the [] in required statement it should get past the validation and start deploying the preview.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah got it, sorry for the extra [], removed

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry I'm being dim. Its not valid JSON now without the [] and looking at the presentation API:

https://iiif.io/api/presentation/3.0/#requiredstatement

I think its only possible to have one required statement. For this example do you want to remove the attribution one?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, thank you, just sent through another updated version with the attribution statement as a second value, hope that’s alright.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This exemplifies the problem with the approach. Now you have two values with one label, but the label only applies to the first. This should be called out in the recipe description, and that this is a field intended for humans to read rather than machines to process. Even the best intentioned machine agent won't know what to do with this... at which point, just merge the two parts into one statement.

Copy link

@alliomeria alliomeria Jul 12, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the feedback @azaroth42.

My reading of the specs is indeed that the requiredStatement property is really only for human readable and displayable statements (recipe states 'for humans', but could be more verbose about this in the general description text as well). I'm thinking of this initial recipe as complementary to and a first step towards the more (intentionally) machinable rights --have a note about the WIP here:

* URIs to be pursued for machineable interactions, pending further discussions within the IIIF and wider repository communities during Summer 2024 and onwards.

(FWIW, also have a brief note about the actionability in general)

This is a bit out of scope for this particular recipe, but It might be worth having a larger discussion about requiredStatement only permitting a single object. I can see the use case for multiple objects/statements (regardless of these potential tags), such as repositories that often have both standardized and local rights statements, where it would helpful to users to see the text for the standardized statement in full alongside the more local statements. Or where multiple language labels and paired value statements could be useful.

{
"label": {
"en": [
"Attribution"
]
},
"value": {
"en": [
"<span>Glen Robson, IIIF Technical Coordinator. <a href=\"https://creativecommons.org/licenses/by-sa/3.0\">CC BY-SA 3.0</a> <a href=\"https://creativecommons.org/licenses/by-sa/3.0\" title=\"CC BY-SA 3.0\"><img src=\"https://licensebuttons.net/l/by-sa/3.0/88x31.png\"/></a></span>"
]
}
},
{
"label": {
"en": [
"Regulated ML/AI Use Permitted - Consent Required"
]
},
"value": {
"en": [
"Material related to this IIIF Manifest may be used for AI or ML training datasets, if Prior Written Consent is obtained from the source holding institution. Standard Attribution of source content must be maintained for the ML/AI dataset. Original URL of source IIIF manifest must be maintained and referenced."
]
}
}
],
"items": [
{
"id": "{{ id.path }}/canvas/p1",
"type": "Canvas",
"height": 3024,
"width": 4032,
"items": [
{
"id": "{{ id.path }}/page/p1/1",
"type": "AnnotationPage",
"items": [
{
"id": "{{ id.path }}/annotation/p0001-image",
"type": "Annotation",
"motivation": "painting",
"body": {
"id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg",
"type": "Image",
"format": "image/jpeg",
"height": 3024,
"width": 4032,
"service": [
{
"id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen",
"profile": "level1",
"type": "ImageService3"
}
]
},
"target": "{{ id.path }}/canvas/p1"
}
]
}
]
}
]
}